贪心+dp
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; //贪心+dp const int maxs = 110; const int maxn = 110; const int maxm = 20010; int S, n, m, ans; int a[maxs][maxn], f[maxm]; int main(){ cin>>S>>n>>m; for(int i =1;i<=S;i++){ for(int j = 1;j<=n;j++){ cin>>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=1;k<=S;k++){ if(j>=2*a[i][k]+1) f[j] = max(f[j],f[j-(2*a[i][k]+1)]+i*k); } } } cout<<f[m]<<endl; return 0; }