jzoj4224-食物【多重背包】
生活随笔
收集整理的這篇文章主要介紹了
jzoj4224-食物【多重背包】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正題
題目大意
nnn個(gè)物品,用空間換價(jià)值。mmm個(gè)方式,用價(jià)錢(qián)換空間。
要求價(jià)值超過(guò)p的情況下價(jià)錢(qián)最低。
解題思路
先算出超過(guò)ppp至少要多少空間。然后在算出這個(gè)空間至少需要多少價(jià)錢(qián)。
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1200,M=51010; int w1[N],v1[N],x[N],y[N],z[N],f2[N][M],f1[M]; int cnt1,cnt2,n,m,p,test,ans,mic; int main() {//freopen("data.in","r",stdin);//freopen("data.out","w",stdout);scanf("%d",&test);while(test--){memset(f1,0x3f,sizeof(f1));memset(f2,0,sizeof(f2));cnt1=0;cnt2=0;scanf("%d%d%d",&n,&m,&p);for(int i=1;i<=n;i++){int t,u,v;scanf("%d%d%d",&t,&u,&v);for(int i=1;i<=v;i*=2){v-=i;w1[++cnt1]=u*i;v1[cnt1]=t*i;}if(v) w1[++cnt1]=u*v,v1[cnt1]=t*v;}f1[0]=0;ans=2147483647;for(int i=1;i<=cnt1;i++)for(int j=p+100;j>=v1[i];j--){f1[j]=min(f1[j],f1[j-v1[i]]+w1[i]);if(j>=p) ans=min(ans,f1[j]);}if(ans==2147483647){printf("TAT\n");continue;}for(int i=1;i<=m;i++)scanf("%d%d%d",&x[i],&y[i],&z[i]);mic=2147483647;for(int i=1;i<=m;i++)for(int j=0;j<=z[i];j++)for(int k=1;k<=M-10;k++)if(j*y[i]<=k){f2[i][k]=max(f2[i-1][k-j*y[i]]+j*x[i],f2[i][k]);if(f2[i][k]>=ans){mic=min(mic,k);break;}}if(mic==2147483647){printf("TAT\n");continue;}printf("%d\n",mic);} }總結(jié)
以上是生活随笔為你收集整理的jzoj4224-食物【多重背包】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jzoj1274-游历的路线【分层图,S
- 下一篇: 初雪的含义 初雪有什么意思