60分求助
查看原帖
60分求助
54824
NCY 楼主2024/7/20 18:20

如题,样例也过了能拿60分,实在找不出哪里错了QAQ

#include<iostream>
#include<algorithm>
#include<vector>
#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define rep2(i,a,b) for(int i=(a);i>=(b);--i)
#define scanf scanf_s
using namespace std;
int n, m, k, l, x, y, a, b, c, t, sum[30], mp[30][30];
struct dat
{
	int x;
	vector<int >tre;
}dp[1001];
vector<int > tr[30];
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n;
	rep(i, 1, n)cin >> sum[i];
	rep(i, 1, n) {
		dp[i].x = sum[i]; dp[i].tre.push_back(i);
	}
	rep(i,1,n-1){
		rep(j, i + 1, n) {
			cin >> t;
			if (t == 1)
				mp[i][j] = 1;
		}
	}
	int flag = 0;
	rep(i, 2, n) {
		flag = -1;
		rep(j, 1, i-1) {
			if (mp[j][i])
				if (dp[i].x < dp[j].x + sum[i])
				{
					dp[i].x =dp[j].x + sum[i];
					flag = j;
				}
			
		}if (flag != -1) { dp[i].tre = dp[flag].tre; dp[i].tre.push_back(i); }
	}
	for (auto zz : dp[n].tre)  cout << zz << " "; 
	cout << endl << dp[n].x;
	return 0;
}
2024/7/20 18:20
加载中...