90分代码:
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
using namespace std;
const int INF=2147483647;
int f,w,a[101][101],dp[101][101][3],pl[101],ans2[101];
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(false);cout.tie(false);
cin>>f>>w;
for(int i=1;i<=f;++i) {
for(int j=1;j<=w;++j) {
cin>>a[i][j];
}
}
memset(dp,0xaf,sizeof(dp));
memset(dp[0],0,sizeof(dp[0]));
for(int i=1;i<=f;++i) {
for(int j=1;j<=w;++j) {
for(int k=j+1;k<=w;++k) {
if(dp[i][k][1]<dp[i-1][j][1]+a[i][k]) {
dp[i][k][1]=dp[i-1][j][1]+a[i][k];
dp[i][k][2]=j;
}
}
}
}
int ans1=0,ii=0;
for(int i=1;i<=w;++i) {
if(ans1<dp[f][i][1]) {
ans1=dp[f][i][1];
ii=i;
}
}
cout<<ans1<<"\n";
for(int i=f;i>=1;--i) {
ans2[i]=ii;
ii=dp[i][ii][2];
}
for(int i=1;i<=f;++i) cout<<ans2[i]<<" ";
cout<<"\n";
return 0;
}
只要在最后加一句:
if(ans1-a[1][ans2[1]]+a[1][1]>ans1) {
ans1=ans1-a[1][ans2[1]]+a[1][1];
ans2[1]=1;
}
就100分了
这是数据
in:
3 5
-1 -2 -5 -1 1
-4 1 -4 5 -7
-4 0 -3 -3 0
out:
4
1 4 5
第七个点也是这种情况。 所以为什么会出现这种情况呢?