您的位置:首页 > 其它

SDAU练习三1018

2016-05-24 20:52 155 查看
题目大意:

有一个小猪存钱罐。空的存钱罐有一个质量,装满后有一个质量,首先给出存钱罐的两个质量

然后给出钱币的价值和质量。求在质量满足的情况下,可以得到的最小价值。
思路:
这是一个完全背包问题,只需要把循环的方式改过来就行了。  只要还有体积,那就往背包里面装入物品,这个和  0  1   区别就是这里。0  1  是在  体积剩余v 的时候还可不可以放入这件物品。
感想:
自己的代码过不了,,还是学习的不好。。
AC代码:

#include <stdio.h>  

#include<iostream>  

#include<cstdio>  

#include<string.h>  

#include<algorithm>  

using namespace std;  

int v[10005];  

int w[10005];  

int dp[10005];  

int main()  

{  

    int n,i,j,k;  

    //freopen("r.txt","r",stdin);  

    int T,V,V1,V2;  

  

    cin>>T;  

    while(T--)  

    {  

        scanf("%d%d",&V1,&V2);  

        V=V2-V1;  

        scanf("%d",&n);  

        for(i=0;i<n;i++)  

        {  

            scanf("%d%d",&v[i],&w[i]);  

        }  

        for(i=0;i<=V;i++)  

            dp[i]=666666;  

        dp[0]=0;  

        for(i=0;i<n;i++)  

        {  

            for(j=w[i];j<=V;j++)  

            {  

                dp[j]=min(dp[j],dp[j-w[i]]+v[i]);  

            }  

        }  

        if(dp[V]==666666) cout<<"This is impossible."<<endl;  

        else  

            cout<<"The minimum amount of money in the piggy-bank is "<<dp[V]<<"."<<endl;  

  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: