hdu 3348 coins
这道题算是一道很经典的题,很好的诠释了贪心和动态规划的不同功能。求最少钱的数量用贪心就够了,但是求最多钱的数量要用到动态规划的思想,每步都尽量保留最大
数量。具体看程序注解:
#include"iostream"
#include"stdio.h"
#include"algorithm"
#include"string.h"
#include"cmath"
using namespace std;
int fewest(int a[],int num[],int price)
{
int i;
int ans=;
for(i=;i>;i--)
{
if(price>=num[i]*a[i])
{
ans+=num[i];
price-=num[i]*a[i];
}
else
{
ans+=price/a[i];
price%=a[i];
}
}
if(price>num[])return -;
else return ans+price;
}
//这个函数的整体思想就是先保留全部的小钱,用大钱补缺,这样就可以得到最大数量
int largest(int a[],int num[],int price)
{
int i;
int ans=;
int sum[];
sum[]=num[];
for(i=;i<;i++)
{
sum[i]=sum[i-]+a[i]*num[i];
}
for(i=;i>;i--)
{
if(price<=sum[i-])continue;
else
{
int t;
//先用满足条件的最大面值,如果有余数,所用张数+1,
//不足的部分用较小面值的进行补
t=((price-sum[i-])/a[i])+(((price-sum[i-])%a[i])?:);
ans+=t;
price-=t*a[i];
}
}
return ans+price;
}
int main()
{
int t,price,i,j;
int a[]={,,,,,};//面值
int num[];//数量
cin>>t;
while(t--)
{
cin>>price;
int sum=;
for(i=;i<=;i++)
{
cin>>num[i];
sum+=num[i]*a[i];
}
if(sum<price) {cout<<"-1 -1"<<endl;continue;}
int mi=fewest(a,num,price);
if(mi==-) {cout<<"-1 -1"<<endl;continue;}
int mx=largest(a,num,price);
cout<<mi<<" "<<mx<<endl;
}
return ;
}
hdu 3348 coins的更多相关文章
- HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...
- 背包系列练习及总结(hud 2602 && hdu 2844 Coins && hdu 2159 && poj 1170 Shopping Offers && hdu 3092 Least common multiple && poj 1015 Jury Compromise)
作为一个oier,以及大学acm党背包是必不可少的一部分.好久没做背包类动规了.久违地练习下-.- dd__engi的背包九讲:http://love-oriented.com/pack/ 鸣谢htt ...
- HDU 2844 Coins (多重背包计数 空间换时间)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 2844 Coins
Coins Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted S ...
- hdu 2844 Coins (多重背包)
题意是给你几个数,再给你这几个数的可以用的个数,然后随机找几个数来累加, 让我算可以累加得到的数的种数! 解题思路:先将背包初始化为-1,再用多重背包计算,最后检索,若bb[i]==i,则说明i这个数 ...
- POJ 1742 hdu 2844 Coins
题目链接:http://poj.org/problem?id=1742 http://acm.hdu.edu.cn/showproblem.php?pid=2844 题目分类:动态规划 代码: #in ...
- hdu 2844 Coins (多重背包+二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 思路:多重背包 , dp[i] ,容量为i的背包最多能凑到多少容量,如果dp[i] = i,那么代表 ...
- hdu 2844 coins(多重背包 二进制拆分法)
Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...
- hdu 2844 Coins 多重背包(模板) *
Coins Time Limit: 2000/1 ...
随机推荐
- jQuery结合Ajax实现简单的前端验证和服务端查询
上篇文章写了简单的前端验证由传统的JavaScript转向流畅的jQuery滑动验证,现在拓展一下,使用Ajax实现用户体验比较好的异步查询,同样还是从建立一个简单的表单开始 <form nam ...
- 2014 牡丹江现场赛 A.Average Score(zoj 3819) 解题报告
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5373 题目意思: 有两个class:A 和 B,Bob 在 Clas ...
- codeforces B. Flag Day 解题报告
题目链接:http://codeforces.com/problemset/problem/357/B 题目意思:输入n个人和m场舞蹈,给出每场舞蹈(只有3个人参与)中参与的舞者的编号,你需要为这些舞 ...
- import static和import的区别
import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....Cl ...
- kindeditor的简单使用
上传到云: 一.引入kindeditor <%@ page language="java" contentType="text/html; charset=UTF- ...
- jsp页面之间传参用el表达式获取
jsp页面之间传参用el表达式获取 参数方法:${param.参数名} session方法:${session.变量名}
- jQuery基础DOM和CSS操作
$('#box').html();//获取 html 内容$('#box').text();//获取文本内容,会自动清理 html 标签$('#box').html('<em>www.li ...
- .pro配置选项
在Qt Creator的项目中添加头文件和库 在Qt Creator中的工程中,工程通过.pro文件管理. 额外需要连接的连接库 unix:LIBS += -L your_lib_path -ly ...
- RGB888->RGB565->RGB888
转自CB的博客:http://blog.chinaaet.com/detail/28298 在我们的计算机中,图像是以RGB888显示的,24位图每个像素保存了32bit的数据,即RGB888+Al ...
- Linux snmp监控
http://blog.csdn.net/apple_llb/article/details/50494787 http://www.ttlsa.com/monitor/snmp-oid/