称号:拼布钱,表面值至1,5。10。25。寻求组成n表面值硬币的最大数目。

分析:dp,01背包。需要二元分割,除此以外TLE。使用每个硬币的数组记录数。轻松升级。

写了一个 多重背包的 O(NV)反而没有拆分快。囧,最后利用了状态压缩优化 90ms;

把 1 cents 的最后处理,其它都除以5,状态就少了5倍了。

说明:貌似我的比大黄的快。(2011-09-26 12:49)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define INF -100001
#define min( a, b ) ((a)<(b)? (a):(b)) int t[ 5 ];
int F[ 2001 ][ 5 ];
int C[ 5 ] = {0,1,1,2,5};
int T[ 5 ][ 15 ]; int main()
{
int P,Q;
while ( scanf("%d",&P) != EOF ) {
for ( int i = 1 ; i <= 4 ; ++ i )
scanf("%d",&t[ i ]); if ( !P ) break;
Q = P%5;
P = P/5;
if ( t[ 1 ] < Q ) {
printf("Charlie cannot buy coffee.\n");
continue;
}t[ 1 ] -= Q;t[ 1 ] /= 5; memset( F, 0, sizeof( F ) );
for ( int i = 1 ; i <= P ; ++ i )
F[ i ][ 0 ] = INF;
F[ 0 ][ 0 ] = F[ 0 ][ 1 ] = Q; //二进制拆分
for ( int i = 2 ; i <= 4 ; ++ i ) {
int base = 1,numb = 0;
while ( t[ i ] >= base ) {
T[ i ][ ++ numb ] = base;
t[ i ] -= base;
base <<= 1;
}
if ( t[ i ] ) T[ i ][ ++ numb ] = t[ i ];
T[ i ][ 0 ] = numb;
} for ( int i = 2 ; i <= 4 ; ++ i ) {
int e = T[ i ][ 0 ];
for ( int j = 1 ; j <= e ; ++ j ) {
int v = T[ i ][ j ];
int u = v*C[ i ];
for ( int k = P ; k >= u ; -- k )
if ( F[ k-u ][ 0 ] >= 0 && F[ k ][ 0 ] < F[ k-u ][ 0 ]+v ) {
for ( int l = 0 ; l <= 4 ; ++ l )
F[ k ][ l ] = F[ k-u ][ l ];
F[ k ][ 0 ] += v;
F[ k ][ i ] += v;
}
}
} //处理 cents 的
for ( int i = t[ 1 ] ; i >= 0 ; -- i )
if ( F[ P-i ][ 0 ] >= 0 ) {
int s = t[ 1 ];
F[ P-i ][ 0 ] += i*5;
F[ P-i ][ 1 ] += i*5;
s -= i;
for ( int j = 4 ; j > 1 ; -- j ) {
int v = min( s/C[ j ], F[ P-i ][ j ] );
F[ P-i ][ j ] -= v;
F[ P-i ][ 1 ] += v*C[ j ];
F[ P-i ][ 0 ] += v*(C[ j ]-1);
s -= v*C[ j ];
}
}
int max = INF,spa = P;
for ( int i = 0 ; i <= t[ 1 ] ; ++ i )
if ( max < F[ P-i ][ 0 ] ) {
max = F[ P-i ][ 0 ];
spa = P-i;
} if ( F[ spa ][ 0 ] <= 0 )
printf("Charlie cannot buy coffee.\n");
else
printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n",
F[ spa ][ 1 ],F[ spa ][ 2 ],F[ spa ][ 3 ],F[ spa ][ 4 ]); }
return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

zoj 2156 - Charlie&#39;s Change的更多相关文章

  1. POJ 1787 Charlie&#39;s Change

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

  2. HDU 4430 &amp; ZOJ 3665 Yukari&#39;s Birthday(二分法+枚举)

    主题链接: HDU:pid=4430" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=4430 ...

  3. zoj 1738 - Lagrange&#39;s Four-Square Theorem

    称号:四方形定理.输出可以表示为一个数目不超过四个平方和表示的数. 分析:dp,完全背包.背包分割整数.可用一维分数计算,它也可以被写为一个二维团结. 状态:设f(i,j,k)为前i个数字,取j个数字 ...

  4. zoj 3696 Alien&#39;s Organ(泊松分布)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3696 Alien's Organ Time Limit: 2 S ...

  5. zoj 2402 - Lenny&#39;s Lucky Lotto Lists

    称号:序列,在前面的每个元件的至少两倍,最大值至n.问:长l船舶有许多这样的. 分析:dp,LIS类别似事. 状态:f(i,j)结束数字为j且长度为i的序列的个数.有转移方程: F[ i ][ j ] ...

  6. HDU 4791 &amp; ZOJ 3726 Alice&#39;s Print Service (数学 打表)

    题目链接: HDU:http://acm.hdu.edu.cn/showproblem.php?pid=4791 ZJU:http://acm.zju.edu.cn/onlinejudge/showP ...

  7. ZOJ 2109 FatMouse&#39; Trade (背包 dp + 贪婪)

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1109 FatMouse prepared M pounds of cat ...

  8. zoj 1100 - Mondriaan&#39;s Dream

    题目:在m*n的地板上铺上同样的1*2的地板砖,问有多少种铺法. 分析:dp,组合,计数.经典dp问题,状态压缩. 状态:设f(i,j)为前i-1行铺满,第i行铺的状态的位表示为j时的铺砖种类数: 转 ...

  9. ZOJ 3587 Marlon&#39;s String 扩展KMP

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3587 题意:给出两个字符串S和T.S,T<=100000.拿出 ...

随机推荐

  1. 破解.net程序 编译和反编译方法

    原文地址:http://www.cnblogs.com/li-peng/archive/2013/01/31/2886727.html 有好多.net程序有加密狗或者有验证,如果exe或dll没有做过 ...

  2. 百度富文本编辑器UEditor1.3上传图片附件等

    今天一直在整我的一个项目的编辑器上传图片,我用的是百度UEditor 1.3版本号的:如今已经有了1.4的了,只是还算比較新吧,可是官网上面没有上传图片这些的教程,而网上对于这方面的资料非常少啊,折腾 ...

  3. 移动开发平台-应用之星app制作教程

    目前在AppStore.GooglePlay等应用商店里已经有以百万计的Apps,应用程序使移动互联网空间得以无限拓展.很多人梦想着AngryBirds式的奇迹在自己身上发生,他们渴望自己开发的应用程 ...

  4. 浅谈JAVA ThreadPoolExecutor(转)

    这篇文章分为两部分,前面是ThreadPoolExecutor的一些基本知识,后一部分则是Mina中一个特殊的ThreadPoolExecutor代码解析.算是我的Java学习笔记吧. 基础 在我看来 ...

  5. 6 款好用的 PC+Android 同步 GTD 软件

    6 款好用的 PC+Android 同步 GTD 软件 最近老鼠工作积极性比较高(其实只要是买平板电脑的欲望在鼓舞着干劲),所以每天很多任务安排,为了不混乱,免不了要用 GTD(Go to do)软件 ...

  6. 《火球——UML大战需求分析》(第1章 大话UML)——1.3 行为型的UML(Behavior Diagram)

    说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  7. 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)

    想利用泛型抽取BaseDao层,简化操作时出现故障: @Transactional这个注解是能够继承的.于是就想写在抽取的BaseDao层上,让实现的类能够不用写@Transactional,就可开启 ...

  8. IIS设置允许下载.exe文件解决方法

    最近很多客户使用IIS服务器,然后提示返现宝下载无法找到等无法下载的问题. 返现宝是.exe安装文件,部分服务器或主机可能无法下载. 第一.如果是自己服务器或VPS请按如下设置: 1.设置MIME,让 ...

  9. JAVA 根据经纬度算出附近的正方形的四个角的经纬度

    /** * * @param longitude 经度 * @param latitude 纬度 * @param distance 范围(米) * @return */ public static ...

  10. Lua 与C 交换 第一篇

    编译 windows上编译lua源代码 cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c del *.o ren lua.obj lua.o ren luac.obj ...