完全背包问题_找的是最小值

完全背包问题_找的是最小值

Sample Input

3 10 110 2 1 1 30 50 10 110 2 1 1 50 30 1 6 2 10 3 20 4

Sample Output

The minimum amount of money in the piggy-bank is 60. The minimum amount of money in the piggy-bank is 100. This is impossible.
 
这题是完全背包问题,求的是最小值,那么就要在初始化时将临时数组f赋值为最大值,并f[0]=0;这样改变下循环判断条件就好了,最后如果不能完全匹配,也就是f[最大值]不变,便输出不可能。
#include
using namespace std;
struct good
{
    int c,w;
}goods[501];
int f[10009];
int main()
{
    int t,e,ff,s,n,i,j;
    cin>>t;
    while(t--)
    {
        cin>>e>>ff;
        s=ff-e;
        for(i=0;i<=s;i++)f[i]=1000000000;
        f[0]=0;
        cin>>n;
        for(i=0;i>goods[i].w>>goods[i].c;
        for(i=0;if[j-goods[i].c]+goods[i].w)
                {
                    f[j]=f[j-goods[i].c]+goods[i].w;
                }
            }
        }
        if(f[s]==1000000000)cout<<"This is impossible."< 
   

你可能感兴趣的:(完全背包问题_找的是最小值)