[TK] 选课 hzoj-tg#279

该题目是一道树上背包问题,题目的全部思路已写在 树上背包问题 中. 该题目代码只供辅助理解.

struct edge{
	int to,w;
};
vector<edge> e[1001];
int n,m,f[1001][1001];

void dfs(int s){
	for(edge i:e[s]){
		dfs(i.to);
		for(int j=n;j>=1;--j){
			for(int k=0;k<=j-1;++k){
				f[s][j]=max(f[s][j],f[i.to][k]+f[s][j-k-1]+i.w);
			}
		}
	}
}

int main(){
	cin>>m>>n;
	for(int i=1;i<=m;++i){
		int x,y;
		cin>>x>>y;
		e[x].push_back(edge{i,y});
	}
	dfs(0);
	cout<<f[0][n];
} 
posted @ 2024-02-16 21:23  HaneDaniko  阅读(13)  评论(0编辑  收藏  举报
/**/