未过样例,暂未优化,求调。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll t,n,m,a[1010][1010],dp[110][110],maxn;
int main(){
cin>>t>>n>>m;
maxn=m;
memset(dp,0,sizeof(dp));
for(int i=1;i<=t;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=t-1;i++){
cout<<maxn<<endl;
m=maxn;
for(int k=0;k<=m;k++){
dp[0][k]=maxn;
}
for(int j=1;j<=n;j++){
for(int k=1;k<=m;k++){
if(k>=a[i][j]) dp[j][k]=max(dp[j-1][k],dp[j][k-a[i][j]]+a[i+1][j]-a[i][j]);
else dp[j][k]=dp[j-1][k];
cout<<dp[j][k]<<" ";
}
cout<<endl;
}
cout<<endl;
for(int j=1;j<=n;j++){
for(int k=0;k<=m;k++){
maxn=max(maxn,dp[j][k]+m-k);
}
}
//maxn=dp[n][m];
//maxn=max(dp[i][n][m],maxn);
//cout<<endl;
}
cout<<maxn;
return 0;
}