poj 1384 Piggy-Bank 多重背包问题
2015-08-14 13:25
399 查看
题目:点击打开链接
题意:小猪存钱罐,知道一些钱币的总重量,和这些钱币的币值以及单个重量,问这些钱最少是多少?
分析:很明显的一道多重背包问题,dp[v],表示重量为i的钱的币值和,对于达不到给定那个总重量m,非法状态的处理已经在0-1背包中详细描述,
对于此题,初始化的时候初始化为INF就可以,然后就是一般的dp递推了
题意:小猪存钱罐,知道一些钱币的总重量,和这些钱币的币值以及单个重量,问这些钱最少是多少?
分析:很明显的一道多重背包问题,dp[v],表示重量为i的钱的币值和,对于达不到给定那个总重量m,非法状态的处理已经在0-1背包中详细描述,
对于此题,初始化的时候初始化为INF就可以,然后就是一般的dp递推了
#include<iostream> #include<string.h> #include<stdio.h> #include<algorithm> using namespace std; const int INF=0x3f3f3f3f; int dp[10005],val[505],w[505]; int n,e,f,m; int main() { int T; cin>>T; while(T--){ cin>>e>>f; m=f-e; cin>>n; for(int i=0;i<n;i++) cin>>val[i]>>w[i]; for(int i=1;i<=m;i++) dp[i]=INF; dp[0]=0; for(int i=0;i<n;i++){ for(int j=0;j<=m;j++) if(w[i]<=j)dp[j]=min(dp[j],dp[j-w[i]]+val[i]); } if(dp[m]==INF)//说明钱币的重量凑不到m printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]); } return 0; }
相关文章推荐
- Linux下Socket编程----connect()函数的包裹函数介绍
- [转]新兵训练营系列课程——海量数据存储基础
- NOIP2012提高组 借教室
- poj - 2186 Popular Cows && poj - 2553 The Bottom of a Graph (强连通)
- 使用画图方法显示排序算法,使用策略模式
- Qt容器
- 总结python中的乱码问题
- [转]新兵训练营系列课程——平台RPC框架介绍
- 包和访问权限
- C++类的成员函数地址(实习笔记)
- 根据 Markdown 制作的 newsletter
- DigitalOcean注册优惠
- error: linker command failed with exit code 1 (use -v to see invocation)
- 常见的RuntimeException异常
- 使用SequoiaDB驱动多线程开发常见错误分析
- Swift学习——Swift解释特定的基础(七)
- F#
- LeetCode Minimum Depth of Binary Tree
- mysql的一次意外错误
- J - A Bit Fun-----(2015 summer training #9)