如题,样例也过了能拿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;
}