题目大意:
有一个小猪存钱罐。空的存钱罐有一个质量,装满后有一个质量,首先给出存钱罐的两个质量
然后给出钱币的价值和质量。求在质量满足的情况下,可以得到的最小价值。
思路:
这是一个完全背包问题,只需要把循环的方式改过来就行了。 只要还有体积,那就往背包里面装入物品,这个和 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;
- }
- }