二维 30 pts WA
#include <bits/stdc++.h>
using namespace std;
int s,n,m,a[105][105],f[105][20005];
int main(){
scanf("%d%d%d",&s,&n,&m);
for (int i=1;i<=s;i++) for (int j=1;j<=n;j++) scanf("%d",&a[j][i]);
for (int i=1;i<=n;i++) sort(a[i]+1,a[i]+s+1);
for (int i=1;i<=n;i++)
for (int j=0;j<=m;j++)
for (int k=0;k<=s;k++)
if (2*a[i][k]+1>j) break;
else f[i][j]=max(f[i][j],f[i-1][j-2*a[i][k]-1]+k*i);
printf("%d\n",f[n][m]);
return 0;
}
一维 AC
#include <bits/stdc++.h>
using namespace std;
int s,n,m,a[105][105],f[20005];
int main(){
scanf("%d%d%d",&s,&n,&m);
for (int i=1;i<=s;i++) for (int j=1;j<=n;j++) scanf("%d",&a[j][i]);
for (int i=1;i<=n;i++) sort(a[i]+1,a[i]+s+1);
for (int i=1;i<=n;i++)
for (int j=m;j>=0;j--)
for (int k=0;k<=s;k++)
if (2*a[i][k]+1>j) break;
else f[j]=max(f[j],f[j-2*a[i][k]-1]+k*i);
printf("%d\n",f[m]);
return 0;
}