[BZOJ1531] [POI2005]Bank notes
2015-09-26 22:33
344 查看
传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=1531题目大意
有n种面值的硬币,每个各有x[i]个,询问最少用多少枚可达到面值m题解
多重背包,直接转化01超时,二进制优化,具体看模板里写的吧var dp:array[0..20000]of longint; y:array[0..200,1..2]of longint; x:array[0..3000,1..2]of longint; i,j,k:longint; n,m,len,a:longint; function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end; begin readln(k); for i:=1 to k do read(y[i,1]); for i:=1 to k do read(y[i,2]); readln(m); len:=0; for i:=1 to k do begin a:=1; while a<y[i,2] do begin inc(len); x[len,1]:=y[i,1]*a; x[len,2]:=a; a:=a<<1; end; inc(len); if a>y[i,2] then x[len,2]:=y[i,2]-a>>1+1 else x[len,2]:=y[i,2]-a+1; x[len,1]:=x[len,2]*y[i,1]; end; dp[0]:=0; for i:=1 to m do dp[i]:=1000000000; for i:=1 to len do for j:=m downto x[i,1] do dp[j]:=min(dp[j],dp[j-x[i,1]]+x[i,2]); writeln(dp[m]); {for i:=1 to len do writeln(x[i,1],' ',x[i,2]);} end.
相关文章推荐
- 【2015上海赛区网络赛】(没有补完)
- HDU 5480 Conturbatio
- Java学习笔记【异常、断言】
- 9.26做题-队列安排
- CentOS6.5 corosync+pacemaker+drbd实现mysql高可用
- HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了
- Matlab将散点绘制为平滑曲线的两种方法
- 罪犯转移问题
- android xmlns res-auto 自定义 attr
- shell中if条件字符串、数字比对,[[ ]]和[ ]区别
- hdu5135 Little Zu Chongzhi's Triangles 状压dp
- unity官方demo学习之Stealth(一)
- 聊一下测试工程师的面试与招聘【转载自安大叔】
- 生日悖论的Python实现
- Docker之dockerfile
- ListView乱谈之ListView的滚动原理
- Java:i++问题(详细分析)
- 记提高服务接口可用性、稳定性注意事项总结
- LeetCode31 Next Permutation
- 2B The least round way