题目链接:http://poj.org/problem?id=1787

题意:有4种货币分别是1元,5元,10元,20元。现在告诉你这四种货币分别有多少个,问你正好凑出P元钱最多可以用多少货币。每种货币要用多少钱。

据说此题有完全背包的写法。。

我是按照多重背包写的,速度也不是很慢。

然后记录了下前驱。

刚开始全都写挫了。。虽然现在也很挫。。

凑合着看吧 --

 #include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <iterator>
#include <vector>
using namespace std;
typedef long long LL; const int INF = ; int P,c[],v[];
int dp[];
int fa[][]; int main(){
v[] = ;
v[] = ;
v[] = ;
v[] = ;
while(){
scanf("%d",&P);
for(int i=;i<=;i++) scanf("%d",&c[i]);
if( P== && c[]==&&c[]==&&c[]==&&c[]==){
break;
}
for(int j=;j<;j++){
dp[j] = -INF;
}
dp[] = ;
memset(fa,,sizeof(fa));
for(int i=;i<=;i++){
if( c[i]*v[i]>P ){
for(int j=v[i];j<=P;j++) {
if( dp[j]<dp[j-v[i]]+){
dp[j] = dp[j-v[i]]+;
if( dp[j]<= ) continue;
for(int k=;k<=;k++){
if( k==i ) fa[j][k] = fa[j-v[i]][k] + ;
else fa[j][k] = fa[j-v[i]][k];
}
}
// dp[j] = max(dp[j],dp[j-v[i]]+1);
}
} else {
int k = ;
while( k<c[i] ){
for(int j=P;j>=v[i]*k;j--){
if( dp[j]<dp[j-v[i]*k]+k ){
dp[j] = dp[j-v[i]*k]+k ;
// if( dp[j]>=0 ) fa[j][i] = fa[j-v[i]*k][i] + k;
if( dp[j] <= ) continue;
for(int e=;e<=;e++){
if( e==i ) fa[j][e] = fa[j-v[i]*k][e] + k;
else fa[j][e] = fa[j-v[i]*k][e];
}
}
// dp[j] = max(dp[j],dp[j-v[i]*k]+k);
}
c[i] -= k;
k <<= ;
}
if( c[i]<= ) continue;
for(int j=P;j>=v[i]*c[i];j--){
if( dp[j]<dp[j-v[i]*c[i]] + c[i] ){
dp[j] = dp[j-v[i]*c[i]] + c[i];
if( dp[j] <= ) continue;
for(int e=;e<=;e++){
if( e==i ) fa[j][e] = fa[j-v[i]*c[i]][e] + c[i];
else fa[j][e] = fa[j-v[i]*c[i]][e];
}
}
// dp[j] = max(dp[j],dp[j-v[i]*c[i]] + c[i] );
}
}
}
if( dp[P] <= ) puts("Charlie cannot buy coffee.");
else printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n",fa[P][],fa[P][],fa[P][],fa[P][]);
}
return ;
}

[POJ 1787]Charlie's Change (动态规划)的更多相关文章

  1. poj 1787 Charlie's Change (多重背包可作完全背包)

    Charlie's Change Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3792   Accepted: 1144 ...

  2. POJ 1787 Charlie's Change (完全背包/多重背包,输出方案的物品个数)

    网上说是多重背包,因为要输出方案,还要记录下路径,百度一下题解就可以. 自己做的时候,还没了解过多重背包,该题直接往完全背包思考了.咖啡的钱看作总的背包容量,1.5.10.25分别代表四种物品的重量, ...

  3. poj 1787 Charlie's Change

    // 题意 给定一个数p,要求用四种币值为1,5,10,25的硬币拼成p,并且硬币数要最多,如果无解输出"Charlie cannot buy coffee.",1<=p&l ...

  4. POJ 1787 Charlie&#39;s Change

    多重背包 可行性+路径记录 题意是说你要用很多其它的零钱去买咖啡.最后输出你分别要用的 1,5 ,10 .25 的钱的数量. 多重背包二进制分解.然后记录下 这个状态.最后逆向推就可以. #inclu ...

  5. poj 1787 背包+记录路径

    http://poj.org/problem?id=1787 Charlie's Change Time Limit: 1000MS   Memory Limit: 30000K Total Subm ...

  6. (多重背包+记录路径)Charlie's Change (poj 1787)

    http://poj.org/problem?id=1787   描述 Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie dri ...

  7. Charlie's Change POJ - 1787

    Time limit 1000 ms Memory limit 30000 kB description Charlie is a driver of Advanced Cargo Movement, ...

  8. 专题复习--背包问题+例题(HDU 2602 、POJ 2063、 POJ 1787、 UVA 674 、UVA 147)

    *注 虽然没什么人看我的博客但我还是要认认真真写给自己看 背包问题应用场景给定 n 种物品和一个背包.物品 i 的重量是 w i ,其价值为 v i ,背包的容量为C.应该如何选择装入背包中的物品,使 ...

  9. Charlie's Change(完全背包+路径记忆)

    Charlie's Change Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3176   Accepted: 913 D ...

随机推荐

  1. selenium+python自动化之操作浏览器

    一.打开网站 1.第一步:从selenium里面导入webdriver模块 2.打开Firefox浏览器(Ie和Chrome对应下面的) 3.打开百度网址 二.设置休眠 1.由于打开百度网址后,页面加 ...

  2. [svn]svn: E155015: 提交失败(细节如下) 解决办法

    svn 出现冲突是经常发生的事,最近改用命令操作svn,用界面电脑有些反应慢 出现冲突使用svn 命令肯定也是可以解决的: 查看警告信息提示冲突的文件,执行 svn resolved <文件名& ...

  3. 内容模块PC标签调用说明

    内容模块 模块名:content 模块提供的可用操作 操作名 说明 lists 内容数据列表 relation 内容相关文章 hits 内容数据点击排行榜 category 内容栏目列表 positi ...

  4. openstack(liberty):部署实验平台(三,简单版本软件安装 之cinder,swift)

    今天这里追加存储相关的部署,主要是Block和Object,为了看到效果,简单的部署在单节点上,即Block一个节点,Object对应一个节点. 读者可能会觉得我这个图和之前的两个post有点点不同, ...

  5. Web前端相关

    1)emmet2)prettify3)angularjs4)coffeescript5)bower (nodejs)6)requirejs

  6. Python(正则 Time datatime os sys random json pickle模块)

    正则表达式: import re #导入模块名 p = re.compile(-]代表匹配0至9的任意一个数字, 所以这里的意思是对传进来的字符串进行匹配,如果这个字符串的开头第一个字符是数字,就代表 ...

  7. AngularJs中的directives(指令part1)

    一.指令的职责   指令的职责是修改DOM结构,并将作用域和DOM连接起来.即指令既要操作DOM,将作用域内的数据绑定到DOM节点上,又要为DOM绑定事件调用作用域内的对应的方法. 二.创建自定义指令 ...

  8. LintCode "Coins in a Line III" !!

    https://codesolutiony.wordpress.com/2015/05/24/lintcode-coins-in-a-line-iii/ A very juicy one! Deser ...

  9. 【转】Java HashMap工作原理(好文章)

    大部分Java开发者都在使用Map,特别是HashMap.HashMap是一种简单但强大的方式去存储和获取数据.但有多少开发者知道HashMap内部如何工作呢?几天前,我阅读了java.util.Ha ...

  10. phpinfo详解

    php的很多信息都可以从phpinfo中获取,下面就详细了解下phpinfo的输出内容 1 php版本信息 第一行显示当前php版本 PHP Version 5.5.12 2 php.ini文件的位置 ...