最后一个测试点错的
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int num, maxn = 0,ptr=0;
cin >> num;
vector<int>arr(num + 5);
vector<int>sum(num + 5, 0);
vector<vector<int>>mark(num + 5, vector<int>(num + 5));
vector<int>path(num + 5);
for (int i = 1; i <= num; i++)
{
cin >> arr[i];
sum[i] = arr[i];
}
for (int i = 1; i <= num; i++)
for (int j = i + 1; j <= num; j++)
cin >> mark[i][j];
for (int i = num - 1; i > 0; i--)//逆推
{
for (int j = i + 1; j <= num; j++)
{
if (mark[i][j] && sum[j] + arr[i] > sum[i])
{
sum[i] = sum[j] + arr[i];
path[i] = j;
}
}
if (sum[i] > maxn)
{
maxn = sum[i];
ptr = i;
}
}
while (path[ptr])
{
cout << ptr<< ' ';
ptr = path[ptr];
}//回溯
cout << ptr<<endl;
cout << maxn;
return 0;
}