求思路问题QAQ
查看原帖
求思路问题QAQ
759274
Stevehim楼主2023/2/14 18:56
#include <bits/stdc++.h>
#define maxn 510
using namespace std;
int a[maxn][maxn];
int f[maxn][maxn];
int n, v; //注意v表示花瓶数量
int ans[maxn][maxn];

int main() {
	freopen("P1854_2.in", "r", stdin);
	cin >> n >> v;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= v; j++) {
			cin >> a[i][j]; //存图,数组应该就行
		}
	}
	memset(f, 0, sizeof(f));
	memset(ans, 0, sizeof(ans));
	for (int i = 1; i <= n; i++) { //
		for (int j = 1; j <= v; j++) {
			f[i][j] = 0;
			for (int h = 1; h <= j - 1; h++) {
				if (f[i - 1][h] + a[i][j] > f[i][j]) {
					f[i][j] = f[i - 1][h] + a[i][j];
					ans[i][j] = h;
				}
			}
		}
	}
	int ans1 = 0;
	int ans2;
	for (int i = 1; i <= v; i++) {
		if (f[n][i] > ans1) {
			ans1 = f[n][i];
			ans2 = i;
		}
	}
	cout << ans1 << endl;
	int a1[maxn];
	memset(a, 0, sizeof(a));
	for (int i = n; i >= 1; i--) {
		a1[i] = ans2;
		ans2 = ans[i][ans2]; //调取
	}
	for (int i = 1; i <= n; i++) {
		cout << a1[i] << ' ';
	}
	return 0;
}

2023/2/14 18:56
加载中...