标签:printf 方便 最小值 bsp minimum ini color mon 完全
这题是完全背包啊。
与众不同的是它是用背包取的最小值,所以边界条件有讲究:dp[0]=0,其他的赋值为inf(无穷大),这样方便取min操作。
#include<bits/stdc++.h> using namespace std; const int inf=0x3fffff,N=510; int dp[N*20],v[N],w[N]; int main() { int t,n,e,f,m; scanf("%d",&t); while(t--) { scanf("%d%d",&e,&f); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&v[i],&w[i]); m=f-e; for(int i=1;i<=m;i++) dp[i]=inf; dp[0]=0; for(int i=1;i<=n;i++) for(int j=w[i];j<=m;j++) dp[j]=min(dp[j],dp[j-w[i]]+v[i]); if(dp[m]<inf) printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]); else printf("This is impossible.\n"); } return 0; }
标签:printf 方便 最小值 bsp minimum ini color mon 完全
原文地址:https://www.cnblogs.com/Siv0106/p/11719259.html