hdoj1114

来源:互联网 发布:js中有哪些事件 编辑:程序博客网 时间:2024/03/29 05:05

完全背包

状态转移方程式 f[i][j]=max(f[i][j-k*volume[i]]+k*value[i])   (0<=k<=v/volume)

这个题目里面  FF[v]=min(FF[v],FF[v-volume[i]]+value[i])

FF[0]=0;  F[1...v]=inf;

#include"iostream"#include"algorithm"using namespace std;const int maxn=1010;const int maxv=10010;const int inf=9999999999;int value[maxn];int volume[maxn];int f[maxn][maxv];int FF[maxv];int main(){    int T;    scanf("%d",&T);    while(T--)    {        int E,F,n,v;        scanf("%d%d%d",&E,&F,&n);        v=F-E;        for(int i=1;i<=n;i++)            scanf("%d%d",&value[i],&volume[i]);        for(int i=0;i<=v;i++)            FF[i]=inf;        FF[0]=0;        for(int i=1;i<=n;i++)            for(int j=volume[i];j<=v;j++)                        FF[j]=min(FF[j],FF[j-volume[i]]+value[i]);        if(FF[v]!=inf)            cout<<"The minimum amount of money in the piggy-bank is "<<FF[v]<<"."<<endl;        else            cout<<"This is impossible."<<endl;    }    return 0;}




#include"iostream"#include"algorithm"using namespace std;const int num=510;const int fuck=10000;const int dj=10000000000;int main(){//freopen("a.txt","r",stdin);int T,v1,v2,V,v,i,n;int f[fuck];int c[num];int w[num];cin>>T;while(T--){cin>>v1>>v2;V=v2-v1;cin>>n;for(i=0;i<n;i++)cin>>w[i]>>c[i];for(i=0;i<=V;i++)f[i]=dj;f[0]=0;for(i=0;i<n;i++)for(v=c[i];v<=V;v++)if(f[v-c[i]]+w[i]<f[v])f[v]=f[v-c[i]]+w[i];if(f[V]==dj) cout<<"This is impossible.\n";elsecout<<"The minimum amount of money in the piggy-bank is "<<f[V]<<"."<<endl;}return 0;}

0 0
原创粉丝点击