luogu1064金明的预算方案
Posted achensy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu1064金明的预算方案相关的知识,希望对你有一定的参考价值。
题面太长
手残把n打成m
1 void read() 2 { 3 red(n); 4 red(m); 5 memset(v,0x3f,sizeof(v)); 6 for(int i=1;i<=m;++i) 7 { 8 red(x); 9 red(p); 10 red(q); 11 if(q) 12 { 13 v[q][i]=x; 14 w[q][i]=x*p; 15 } 16 else 17 { 18 v[i][0]=x; 19 w[i][0]=x*p; 20 } 21 } 22 } 23 void work() 24 { 25 for(int i=1;i<=m;++i) 26 for(int j=n;j>=v[i][0];--j) 27 { 28 if(f[j-v[i][0]]+w[i][0]>f[j]) 29 { 30 f[j]=f[j-v[i][0]]+w[i][0]; 31 for(int k=1;k<=m;++k) 32 if(j+v[i][k]<=m) 33 f[j+v[i][k]]=max(f[j+v[i][k]],f[j]+w[i][k]); 34 } 35 } 36 for(int i=1;i<=n;++i) 37 ans=max(ans,f[i]); 38 printf("%d",ans); 39 }
1 void read() 2 { 3 red(n); 4 red(m); 5 memset(v,0x3f,sizeof(v)); 6 for(int i=1;i<=m;++i) 7 { 8 red(x); 9 red(p); 10 red(q); 11 if(q) 12 { 13 v[q][i]=x; 14 w[q][i]=x*p; 15 } 16 else 17 { 18 v[i][0]=x; 19 w[i][0]=x*p; 20 } 21 } 22 } 23 void work() 24 { 25 for(int i=1;i<=m;++i) 26 for(int j=n;j>=v[i][0];--j) 27 { 28 if(!v[i][0]) 29 break; 30 if(f[j-v[i][0]]+w[i][0]>f[j]) 31 { 32 f[j]=f[j-v[i][0]]+w[i][0]; 33 for(int k=1;k<=m;++k) 34 if(j+v[i][k]<=n) 35 f[j+v[i][k]]=max(f[j+v[i][k]],f[j]+w[i][k]); 36 } 37 } 38 for(int i=0;i<=n;++i) 39 ans=max(ans,f[i]); 40 printf("%d",ans); 41 }
这个时候才注意到附件是0-2个
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+5; 4 const int INF=1e9+7; 5 int n,m,x,p,q,v[65][65],w[65][65],f[maxn],ans,t[65]; 6 template <class t>void red(t &x) 7 { 8 x=0; 9 int w=1; 10 char ch=getchar(); 11 while(ch<‘0‘||ch>‘9‘) 12 { 13 if(ch==‘-‘) 14 w=-1; 15 ch=getchar(); 16 } 17 while(ch>=‘0‘&&ch<=‘9‘) 18 { 19 x=(x<<3)+(x<<1)+ch-‘0‘; 20 ch=getchar(); 21 } 22 x*=w; 23 } 24 void input() 25 { 26 freopen("input.txt","r",stdin); 27 } 28 void read() 29 { 30 red(n); 31 red(m); 32 memset(v,0x3f,sizeof(v)); 33 for(int i=1;i<=m;++i) 34 { 35 red(x); 36 red(p); 37 red(q); 38 if(q) 39 { 40 v[q][++t[q]]=x; 41 w[q][t[q]]=x*p; 42 } 43 else 44 { 45 v[i][0]=x; 46 w[i][0]=x*p; 47 } 48 } 49 } 50 void work() 51 { 52 for(int i=1;i<=m;++i) 53 for(int j=n;j>=v[i][0];--j) 54 { 55 if(!v[i][0]) 56 break; 57 if(j>=v[i][0]) 58 f[j]=max(f[j],f[j-v[i][0]]+w[i][0]); 59 if(j>=v[i][1]+v[i][0]) 60 f[j]=max(f[j],f[j-v[i][1]-v[i][0]]+w[i][1]+w[i][0]); 61 if(j>=v[i][2]+v[i][0]) 62 f[j]=max(f[j],f[j-v[i][2]-v[i][0]]+w[i][2]+w[i][0]); 63 if(j>=v[i][1]+v[i][0]+v[i][2]) 64 f[j]=max(f[j],f[j-v[i][1]-v[i][0]-v[i][2]]+w[i][2]+w[i][1]+w[i][0]); 65 } 66 for(int i=0;i<=n;++i) 67 ans=max(ans,f[i]); 68 printf("%d",ans); 69 } 70 int main() 71 { 72 //input(); 73 read(); 74 work(); 75 return 0; 76 }
以上是关于luogu1064金明的预算方案的主要内容,如果未能解决你的问题,请参考以下文章