anyiak
立身须正,为人当明
安逸的网络日志
洛谷 P2014 [CTSC1997]选课 树形DP

#include<bits/stdc++.h>
#define N 305
using namespace std;
int n,m;
vector<int> G[N];
int w[N];
int dp[N][N];//dp[i][j] : 从i往下选j门课得到的最大学分 
void dfs(int u,int d){//选到第u门课,还剩d门课可以选 
	if(d==0)return;
	for(int i=0;i<G[u].size();i++){
		int t=G[u][i];
		for(int j=0;j<d;j++){
			dp[t][j]=dp[u][j]+w[t];
		}
		dfs(t,d-1);
		for(int j=1;j<=d;j++){
			dp[u][j]=max(dp[u][j],dp[t][j-1]);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int k;
		cin>>k>>w[i];
		G[k].push_back(i);
	}
	dfs(0,m);
	cout<<dp[0][m]<<endl;
	return 0;
}

发表评论

textsms
account_circle
email

安逸的网络日志

洛谷 P2014 [CTSC1997]选课 树形DP
#include<bits/stdc++.h> #define N 305 using namespace std; int n,m; vector<int> G[N]; int w[N]; int dp[N][N];//dp[i][j] : 从i往下选j门课得到的最…
扫描二维码继续阅读
2020-12-30