- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #define ll long long
- #define go(i,a,b) for(register int i=a;i<=b;i++)
- #define yes(i,a,b) for(register int i=a;i>=b;i--)
- #define M 100010
- using namespace std;
- int read()
- {
- int x=0,y=1;char c=getchar();
- while(c<'0'||c>'9') {if(c=='-') y=-1;c=getchar();}
- while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
- return x*y;
- }
- struct node {ll a,b,c;} d[M];
- int T,n;
- ll f[M],ans;
- bool cmp(node x,node y) {return x.c*y.b<y.c*x.b;}
- int main()
- {
- T=read();n=read();
- go(i,1,n) d[i].a=read();
- go(i,1,n) d[i].b=read();
- go(i,1,n) d[i].c=read();
- sort(d+1,d+n+1,cmp);
- go(i,1,n)
- yes(j,T,d[i].c)
- f[j]=max(f[j],f[j-d[i].c]+d[i].a-j*d[i].b);
- go(i,1,T) ans=max(ans,f[i]);
- printf("%lld",ans);
- return 0;
- }
- View Code
来源: http://www.bubuko.com/infodetail-2935012.html