81分求条
查看原帖
81分求条
632311
huyangmu楼主2024/9/23 14:57
#include <bits/stdc++.h>
#define int long long 
using namespace std;
const int N = 105;
int n, m, a[N][N], dp[N][N], ans = LONG_LONG_MIN, last;
vector<int> vec;
signed main (){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; ++i){
		for (int j = 1; j <= m; ++j) cin >> a[i][j];
	}
	memset (dp, -0x3f, sizeof(dp));
	for (int i = 0; i <= 100; ++i) dp[0][i] = 0; 
	for (int i = 1; i <= n; ++i){
		for (int j = i; j <= m; ++j){
			for (int k = 1; k < j; ++k) dp[i][j] = max (dp[i][j], dp[i - 1][k] + a[i][j]);
		}
	}
	for (int i = n; i <= m; ++i) ans = max (ans, dp[n][i]);
	cout << ans << '\n';
	for (int i = n; i <= m; ++i){
		if (dp[n][i] == ans){
			last = i;
			break;
		}
	}
	vec.push_back(last);
	ans -= a[n][last];
	for (int i = n - 1; i >= 1; --i){
		for (int j = 1; j < last; ++j){
			if (dp[i][j] == ans){
				last = j;
				break;
			}
		}
		ans -= a[i][last];
		vec.push_back(last);
	}
	reverse(vec.begin(), vec.end());
	for (int i = 0; i < vec.size(); ++i) cout << vec[i] << ' ';
	cout << '\n';
	return 0;
}
2024/9/23 14:57
加载中...