Piggy-Bank HDU 1114
初始化的细节问题:
因为要求恰好装满!!
所以初始化要注意:
初始化时除了F[0]为0,其它F[1..V]均设为−∞。
又这个题目是求最小价值:
则就是初始化时除了F[0]为0,其它F[1..V]均设为∞。
1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 #include<string.h> 5 using namespace std; 6 const int inf=1000005; 7 int a[505],b[505],dp[10005]; 8 int main() 9 { 10 int t,n,n1,m,i,j; 11 scanf("%d",&t); 12 while(t--) 13 { 14 scanf("%d%d",&n,&n1); 15 n=n1-n; 16 scanf("%d",&m); 17 for(i=0;i<m;i++) 18 scanf("%d%d",&a[i],&b[i]); 19 memset(dp,inf,sizeof(dp)); 20 dp[0]=0; 21 for(i=0;i<m;i++) 22 for(j=b[i];j<=n;j++) 23 dp[j]=min(dp[j],dp[j-b[i]]+a[i]); 24 if(dp[n]<=inf) 25 printf("The minimum amount of money in the piggy-bank is %d. ",dp[n]); 26 else 27 printf("This is impossible. "); 28 } 29 return 0; 30 }
还有:
1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 #include<string.h> 5 using namespace std; 6 const int inf=1000005; 7 int a[505],b[505],dp[10005]; 8 int main() 9 { 10 int t,n,n1,m,i,j; 11 scanf("%d",&t); 12 while(t--) 13 { 14 scanf("%d%d",&n,&n1); 15 n=n1-n; 16 scanf("%d",&m); 17 for(i=0;i<m;i++) 18 scanf("%d%d",&a[i],&b[i]); 19 for(i=1;i<=n;i++) 20 dp[i]=inf; 21 dp[0]=0; 22 for(i=0;i<m;i++) 23 for(j=b[i];j<=n;j++) 24 dp[j]=min(dp[j],dp[j-b[i]]+a[i]); 25 if(dp[n]!=inf) 26 printf("The minimum amount of money in the piggy-bank is %d. ",dp[n]); 27 else 28 printf("This is impossible. "); 29 } 30 return 0; 31 }