关于本题的一些疑问
查看原帖
关于本题的一些疑问
935908
zengziqvan楼主2023/10/2 00:17

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

第七个点也是这种情况。 所以为什么会出现这种情况呢?

2023/10/2 00:17
加载中...