题目大意:给你一个储蓄罐空的,和满的重量,然后给出各种硬币的价值和对应的重量,
要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量
解题思路:完全背包问题,只是求最小值,注意初始化的处理就可以。
已知储蓄罐满时的质量f以及空时质量e,有n种硬币,每种硬币的价值为p,质量为w,求该储蓄罐中的最少有多少钱?
这道题还要用到动态规划
1 #include<stdio.h> 2 #define inf 10000000 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 int n; 7 scanf("%d",&n); 8 while(n--){ 9 int i,empty,full,m; 10 int p[600],w[600],dp[10050];//p是价值,w是重量; 11 scanf("%d%d",&empty,&full); 12 full-=empty; 13 scanf("%d",&m); 14 for(i=0;i<m;i++) 15 scanf("%d%d",&p[i],&w[i]); 16 for(i=0;i<=full;i++)//将dp数组中的值全部变成inf; 17 dp[i]=inf; 18 dp[0]=0; 19 for(int k=0;k<m;k++) 20 for(i=0;i<=full;i++) 21 if(i>=w[k]) 22 dp[i]=min(dp[i],dp[i-w[k]]+p[k]);//动态规划递推关系式,更新dp数组;dp[k-w[k]]表示的是增加k-w[k]重量的得到价值; 23 if(dp[full]==inf) 24 printf("This is impossible.\n"); 25 else 26 printf("The minimum amount of money in the piggy-bank is %d.\n",dp[full]); 27 } 28 return 0; 29 }
时间: 2024-10-13 18:59:02