大佬求调
查看原帖
大佬求调
1110691
wuenzi楼主2024/7/4 22:12
#include <bits/stdc++.h>
using namespace std;
int n, m;

struct xk {
	int b, f;
} f[305];
int cnt[305];
int dp[305][305];
int k = 1;
vector<int> l;
void dfs(int gjd) {
	bool vl=0;
	for (int i = 1; i <= n; i++) {
		if (f[i].b == gjd) {
			vl=1;
			int m=k;
			dfs(i);
			if(m+1==k){
				continue;
			}
			for (int j = m; j >= 1; j--) {
							dp[k][j] = max(dp[k - 1][j], dp[k - 1][j - 1] + f[i].f);
						}
						
		k++;	
		}
	}
	if(vl==1){
		dp[k][1] = f[gjd].f;		
		for (int i = 2; i <= m; i++) {
				dp[k][i] = dp[k - 1][i - 1] + f[gjd].f;
			}
			l.push_back(gjd);
			k++;
	}else{
		for (int j = m; j >= 1; j--) {
									dp[k][j] = max(dp[k - 1][j], dp[k - 1][j - 1] + f[gjd].f);

								}
								
		k++;
	}
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> f[i].b >> f[i].f;
		if (f[i].b!=0) {
			cnt[i] = 1;
		}
	}
	for (int i = 1; i <= n; i++) {
		if (cnt[i] == 0) {
			dfs(i);
		}
	}
	cout << dp[n][m];
	return 0;
}

2024/7/4 22:12
加载中...