p1018

来源:互联网 发布:知满天公务员面试 编辑:程序博客网 时间:2024/05/22 14:42

简单题意:称出背包装物品前后的重量,求最小价值

解题思路:完全背包问题

感想:看完背包九讲,整理出的思路

AC代码:

#include<stdio.h>  
#include<string.h>  
#define N 505  
#define inf -2000000000  
inline int min (int a,int b)  
{  
    return a>b?b:a;  
}  
int main()  
{  
    int cas,ori,i,j,n,p[N],w[N],dp[10005],total;  
    scanf("%d",&cas);  
    while (cas--)  
    {  
        scanf("%d%d",&ori,&total);  
        total-=ori;  
        scanf("%d",&n);  
        for (i=1;i<=n;++i)  
        {  
            scanf("%d%d",&p[i],&w[i]);  
        }  
        for (i=1;i<=total;++i) dp[i]=inf;  
        dp[0]=0;  
        for (i=1;i<=n;++i)  
        {  
            for (j=w[i];j<=total;++j)  
            {  
                if (dp[j]<0) dp[j]=dp[j-w[i]]+p[i];  
                else  
                {  
                    if (dp[j-w[i]]+p[i]>0) dp[j]=min(dp[j],dp[j-w[i]]+p[i]);  
                }  
            }  
        }  
       if (dp[total]>0) printf("The minimum amount of money in the piggy-bank is %d./n",dp[total]);  
       else printf("This is impossible./n");  
    }  
    return 0;  

0 0
原创粉丝点击