社区讨论

20求调,悬关

P2014[CTSC1997] 选课参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m38uiv8j
此快照首次捕获于
2024/11/08 22:42
去年
此快照最后确认于
2025/11/04 15:06
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <queue>
#include <stack>
#include <vector>
using namespace std;

#define maxn 310 

int n,m;
int dp[maxn][maxn];//id and the number of class I have chosen

vector<int>t[maxn];

void eml(int id){
	for(int i=0;i<t[id].size();i++){
		int u=t[id][i];
		if((int)t[u].size()!=0){
			eml(u);
		}
		for(int j=m;j>=2;j--){
			for(int k=1;k<=j;k++){
				dp[id][j]=max(dp[id][j],dp[id][j-k]+dp[u][k]);
				//cout<<"id:"<<endl;cout<<id<<" "<<dp[id][j+1]<<endl;
			}
		}	
	}
	return;	
}

int main(){
	memset(dp,0,sizeof(dp));
	cin>>n>>m; 
	++m;
	dp[0][1]=0;
	for(int i=1;i<=n;++i){
		int ff,tt;
		cin>>ff>>dp[i][1];
		t[ff].push_back(i);
	}
	//for(int i=0;i<=n;i++) cout<<t[i].size()<<" ";cout<<endl;
	eml(0);
	cout<<dp[0][m];
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...