[POJ 1787]Charlie's Change (动态规划)
题目链接: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 (动态规划)的更多相关文章
- poj 1787 Charlie's Change (多重背包可作完全背包)
Charlie's Change Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3792 Accepted: 1144 ...
- POJ 1787 Charlie's Change (完全背包/多重背包,输出方案的物品个数)
网上说是多重背包,因为要输出方案,还要记录下路径,百度一下题解就可以. 自己做的时候,还没了解过多重背包,该题直接往完全背包思考了.咖啡的钱看作总的背包容量,1.5.10.25分别代表四种物品的重量, ...
- poj 1787 Charlie's Change
// 题意 给定一个数p,要求用四种币值为1,5,10,25的硬币拼成p,并且硬币数要最多,如果无解输出"Charlie cannot buy coffee.",1<=p&l ...
- POJ 1787 Charlie's Change
多重背包 可行性+路径记录 题意是说你要用很多其它的零钱去买咖啡.最后输出你分别要用的 1,5 ,10 .25 的钱的数量. 多重背包二进制分解.然后记录下 这个状态.最后逆向推就可以. #inclu ...
- poj 1787 背包+记录路径
http://poj.org/problem?id=1787 Charlie's Change Time Limit: 1000MS Memory Limit: 30000K Total Subm ...
- (多重背包+记录路径)Charlie's Change (poj 1787)
http://poj.org/problem?id=1787 描述 Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie dri ...
- Charlie's Change POJ - 1787
Time limit 1000 ms Memory limit 30000 kB description Charlie is a driver of Advanced Cargo Movement, ...
- 专题复习--背包问题+例题(HDU 2602 、POJ 2063、 POJ 1787、 UVA 674 、UVA 147)
*注 虽然没什么人看我的博客但我还是要认认真真写给自己看 背包问题应用场景给定 n 种物品和一个背包.物品 i 的重量是 w i ,其价值为 v i ,背包的容量为C.应该如何选择装入背包中的物品,使 ...
- Charlie's Change(完全背包+路径记忆)
Charlie's Change Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3176 Accepted: 913 D ...
随机推荐
- 全局程序集GlobalAssemblyInfo.cs进行版本控制(引)
原文出自:http://blog.csdn.net/oyi319/article/details/5753311 1.全局程序集GlobalAssemblyInfo.cs 我们编写的一个解决方案,通常 ...
- Jersey框架一:Jersey RESTful WebService框架简介
Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...
- mootools upgrate from 1.2 to 1.3 or 1.4
Update from 1.2 to 1.3 lorenzos edited this page on 8 Jul 2011 · 2 revisions Pages 19 Home Home Chan ...
- HttpWebRequest 注意
使用HttpWebRequest 一定要保证GetRequestStream和GetResponse对象关闭,否则容易造成连接处于CLOSE_WAIT状态 using (Stream stream = ...
- [系统开发] Postfix 邮件管理系统
一.简介 开发时间:2012年 开发工具:Perl CGI 这是我开发的 Postfix 邮件管理系统,通过它可以安全.方便的对邮件域名.用户.权限.组.邮箱容量.安全等进行各种设置:界面样式借鉴了 ...
- 黄聪:WordPress动作钩子函数add_action()、do_action()源码解析
WordPress常用两种钩子,过滤钩子和动作钩子.过滤钩子相关函数及源码分析在上篇文章中完成,本篇主要分析动作钩子源码. 然而,在了解了动作钩子的源码后你会发现,动作钩子核心代码竟然跟过滤钩子差不多 ...
- HttpUrlConnection java.net.SocketException: Software caused connection abort: recv failed
最近做java swing程序在模拟httprequest请求的时候出现了这个错误 java.net.SocketException: Software caused connection abort ...
- UVA 272 TEX Quotes
TEX Quotes 题意: 变引号. 题解: 要想进步,真的要看一本好书,紫书P45 代码: #include<stdio.h> int main() { int c,q=1; whil ...
- linux命令(6)crontab的用法和解析
一,写入格式: * * * * * command minute hour day month week command 其中: minute: 表示分钟,可以是从0到59之间 ...
- Linux tar指令
linux 下的命令真是太多了.最近在看<Linux Shell编程从初学到精通>一书.该书有468页,很可惜我并不是那种很有耐性一个例子一个例子地跟着做的人,最多在看到些不太清楚的地方会 ...