22分代码:
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; const int N=210; const int M=5e6+10; int n,m; int res,c[6],v[N][6],w[N],f[M]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d",&c[i]); for(int i=1;i<=n;i++){ scanf("%d",&w[i]); for(int j=1;j<=m;j++){ scanf("%d",&v[i][j]); } } for(int k=1;k<=m;k++){ for(int i=1;i<=n;i++){ for(int j=c[k];j>=v[i][k];j--){ f[j]=max(f[j],f[j-v[i][k]]+w[i]); } } res=max(res,f[c[k]]); } printf("%d ",res); return 0; }
AC代码:
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; const int N=210; const int M=5e6+10; int n,m,ans,c[6],v[N][6],f[M]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d",&c[i]); for(int i=1;i<=n;i++){ for(int j=0;j<=m;j++){ scanf("%d",&v[i][j]); } } for(int i=1,j,k;i<=n;i++){ for(int a1=c[1];a1>=v[i][1];a1--){ for(int a2=c[2];a2>=v[i][2];a2--){ for(int a3=c[3];a3>=v[i][3];a3--){ for(int a4=c[4];a4>=v[i][4];a4--){ for(int a5=c[5];a5>=v[i][5];a5--){ j=(((a1*(c[2]+1)+a2)*(c[3]+1)+a3)*(c[4]+1)+a4)*(c[5]+1)+a5; k=((((a1-v[i][1])*(c[2]+1)+(a2-v[i][2]))*(c[3]+1)+(a3-v[i][3]))*(c[4]+1)+(a4-v[i][4]))*(c[5]+1)+a5-v[i][5]; ans=max(ans,f[j]=max(f[j],f[k]+v[i][0])); } } } } } } printf("%d ",ans); return 0; }