码风良好,0pts悬关求助
查看原帖
码风良好,0pts悬关求助
1181602
Cute_Furina楼主2025/1/18 23:00
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, m, a[105][105], ans, dp[105][105], b[105], used[105];
void dfs(int l, int cnt) {
	if(cnt == dp[n][m]) {
		for(int i = 1;i < n;i ++) {
			cout << b[i] << " ";
		}
		cout << b[n];
		exit(0);
	}
	for(int i = 1;i <= m;i ++) {
		if(!used[i]) {
			used[i] = 1;
			b[l] = i;
			dfs(l + 1, cnt + a[l][i]);
			used[i] = 0;
		}
	}
}
signed main() {
	cin >> n >> m;
	for(int i = 1;i <= n;i ++) {
		for(int j = 1;j <= m;j ++) {
			cin >> a[i][j];
		}
	}
	for(int i = 1;i <= n;i ++) {
		for(int j = 1;j <= m;j ++) {
			dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1] + a[i][j]);
		}
	}
	cout << dp[n][m] << endl;
	dfs(1, 0);
	return 0;
}

麻烦不要上来就贴代码,请给出我的思路错了哪里,谢谢

2025/1/18 23:00
加载中...