Esuan24 @ 2017-10-31 11:17:54
rt。 二维(wa):
#include<bits/stdc++.h>
#define LL long long
using namespace std;
struct node {
LL a,b,c;
} m[100010];
LL t,n,F[51][100010],maxn=0;
inline bool cmp(node a,node b) {
return a.c*b.b<b.c*a.b;
}
int main() {
//memset(F,255,sizeof(F));
cin>>t>>n;
for(LL i=1; i<=n; i++)cin>>m[i].a;
for(LL i=1; i<=n; i++)cin>>m[i].b;
for(LL i=1; i<=n; i++)cin>>m[i].c;
sort(m+1,m+1+n,cmp);
for(LL i=1; i<=n; i++) {
for(LL j=m[i].c; j<=t; j++)
F[i][j]=max(F[i-1][j],F[i-1][j-m[i].c]+m[i].a-j*m[i].b);
}
for(LL i=1; i<=n; i++)
for(LL j=m[i].c;j<=t;j++)
maxn=max(maxn,F[i][j]);
cout<<maxn;
return 0;
}
一维(ac):
#include<bits/stdc++.h>
#define LL long long
using namespace std;
struct node {
LL a,b,c;
} m[100010];
LL t,n,F[100010],maxn=0;
inline bool cmp(node a,node b) {
return a.c*b.b<b.c*a.b;
}
int main() {
//memset(F,255,sizeof(F));
cin>>t>>n;
for(LL i=1; i<=n; i++)cin>>m[i].a;
for(LL i=1; i<=n; i++)cin>>m[i].b;
for(LL i=1; i<=n; i++)cin>>m[i].c;
sort(m+1,m+1+n,cmp);
for(LL i=1; i<=n; i++) {
for(LL j=t; j>=m[i].c; j--)
F[j]=max(F[j],F[j-m[i].c]+m[i].a-j*m[i].b);
}
for(LL i=1; i<=t; i++)
maxn=max(maxn,F[i]);
cout<<maxn;
return 0;
}
by liuxuan0818 @ 2017-11-01 15:23:38
+1,二维只有55分,一维AC。。。。
by Santiego @ 2018-10-30 12:41:40
+1
by zjcOvO @ 2019-06-02 11:32:03
for(LL i=1; i<=n; i++) {
for(LL j=m[i].c; j<=t; j++)
F[i][j]=max(F[i-1][j],F[i-1][j-m[i].c]+m[i].a-j*m[i].b);
}
你的f数组
f[i][t](t<j)
没有更新
在第一个循环内加一行
for(LL j=1;j<=m[i].c;j++)
F[i][j]=F[i-1][j];
by zjcOvO @ 2019-06-02 11:32:54
错了,是
t<m[i].c