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