裸题:全然背包问题,求装满背包的最小价值。
注意初始化。要求全然装满,除了容量为0的背包外,其它所有赋值为inf。
AC代码:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; #define inf 0x7ffffff int main() { int t,e,f,n; int w[505],v[505],dp[10010]; scanf("%d",&t); while(t--) { scanf("%d%d",&e,&f); int W=f-e; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&v[i],&w[i]); for(int i=1;i<=W;i++) dp[i]=inf; dp[0]=0; for(int i=0;i<n;i++) for(int j=w[i];j<=W;j++) { dp[j]=min(dp[j],dp[j-w[i]]+v[i]); } if(dp[W]!=inf) printf("The minimum amount of money in the piggy-bank is %d. ",dp[W]); else printf("This is impossible. "); } return 0; }