树上背包跑的很慢求助
  • 板块学术版
  • 楼主___A__
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/2/24 12:29
  • 上次更新2024/2/24 15:36:45
查看原帖
树上背包跑的很慢求助
275860
___A__楼主2024/2/24 12:29

洛谷AC 另一个OJ T一个点

P2014 选课

#include<bits/stdc++.h>
using namespace std;
const int N=3e2+5;
vector<int>g[N];
int n,m,mem[N][N],a[N];
int dfs(int u,int v){
	if(mem[u][v]!=-1){
		return mem[u][v];
	}
	if(!v){
		return 0;
	}
	int dp[N]={};
	for(int i:g[u]){
		for(int j=v-1;j>=0;j--){
			for(int k=0;k<=j;k++){
				dp[j]=max(dp[j],dp[j-k]+dfs(i,k));
			}
		}
	}
	return mem[u][v]=dp[v-1]+a[u];
}
int main(){
	cin>>n>>m;
	for(int i=1,f;i<=n;i++){
		cin>>f>>a[i],g[f].push_back(i);
	}
	memset(mem,-1,sizeof(mem));
	cout<<dfs(0,m+1);
}
2024/2/24 12:29
加载中...