老实说代码是仿叉姐的,实在想不到合适的方法输出过程。。。
上代码
//SGU 104 Little Shop of Flowers
//DP
//by night_watcher
#include<iostream>
#include<cstring>
#include<climits>
using namespace std;
#define N 101
#define INF 1000000000
int n,m;
int dp[N][N];
int value[N][N];
bool choice[N][N];
int main(){
int i,j;
while(cin>>n>>m){
memset(dp,0,sizeof(dp));
memset(choice,0,sizeof(choice));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>value[i][j];
for(i=n-1;i>=0;i--){
dp[i][m]=-INF;
for(j=m-1;j>=0;j--){
dp[i][j]=dp[i][j+1];
if(dp[i][j]<dp[i+1][j+1]+value[i][j]){
dp[i][j]=dp[i+1][j+1]+value[i][j];
choice[i][j]=1;
}
}
}
cout<<dp[0][0]<<endl;
for(i=0,j=0;j<m;j++){
if(choice[i][j]){
cout<<j+1;
if(i==n-1) cout<<endl;
else cout<<" ";
i++;
}
}
}
return 0;
}