完全背包 题意 : 能组合到某一特定重量,的最小价值,物品可以重复选择 分析 : 1. 这个题初始设成很大,貌似=-1那个条件就不用判断了,完全背包貌似没什么好说的~~ 代码 : #include <iostream> using namespace std; int maxweight; int w[10001]; int p[50001]; int num; int ff[50001]; int main() { int cases; cin>>cases; while(cases--) { memset(ff,-1,50001*sizeof(int)); int e,f; cin>>e>>f; maxweight=f-e; cin>>num; for(int i=1;i<=num;++i) { cin>>p[i]>>w[i]; } ff[0]=0; for(int i=1;i<=num;++i) { for(int j=0;j<=maxweight;++j) { if(ff[j]!=-1 ) { int noww=j+w[i]; int nowp=ff[j]+p[i]; if(ff[noww]==-1 || nowp<ff[noww]) { ff[noww]=nowp; } } } } if(ff[maxweight]!=-1) { printf("The minimum amount of money in the piggy-bank is %d./n",ff[maxweight]); } else { printf("This is impossible./n"); } } }