動態規劃之完全揹包問題杭電1114
阿新 • • 發佈:2019-02-02
#include <bits/stdc++.h> using namespace std; #define INF 0x7fffffff #define maxn 10010 int main(){ int dp[maxn],w[maxn],p[maxn]; int e,n,f,i,R,j,T; cin>>T; //T組測試資料 while(T--) { cin>>e>>f>>n; //E 空的存錢罐的質量, F 存錢罐裝滿錢的重量 for(i=1;i<=n;++i) { cin>>p[i]>>w[i]; //p[i]硬幣的價值 w[i]硬幣的重量 } for(i=0;i<=10010;i++) { dp[i]=INF; //將陣列初始化為無窮大,防止求最小值時取不到 } dp[0]=0; for(i=1;i<=n;i++) { for(j=w[i];j<=f-e;++j) //倒序輸出 由後一個推出前一個 { if(dp[f-e]!=INF) //資料輸入有效 dp[j]=min(dp[j],dp[j-w[i]]+p[i]); //不取第i個和取第i個價值的最小值 } } if(dp[f-e]!=INF) cout<<"The minimum amount of money in the piggy-bank is "<<dp[f-e]<<"."<<endl; else cout<<"This is impossible."<<endl; } return 0; }