社区讨论

哪里有问题啊(求帮助)

P1270“访问”美术馆参与者 2已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@lo291mfi
此快照首次捕获于
2023/10/23 09:59
2 年前
此快照最后确认于
2023/11/03 10:11
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
#define N 105
using namespace std;
struct tree{
	int l,r,tm,w;
	tree()
	{
		l=r=-1;
	}
}t[N];
int TIME,num,dp[N][N]={0},fa[N];

void plant(int n,int status)
{
	int p,now;
	num++;
	scanf("%d%d",&t[num].tm,&t[num].w);
	t[num].tm*=2;
	if(status==0) t[n].l=num,fa[num]=n;
	else if(status==1) t[n].r=num;
	now=num;
	if(t[now].w==0)
	{
		plant(now,0);
		plant(now,1);
	}
	return;
}

int dfs(int x,int time)
{
	time-=t[x].tm;
	if(x==-1|| time<=0) return 0;
	//cout<<x<<endl;
	for(int i=0;i<=time;i++)
	{
		int u=dfs(t[x].l,i);
		int v=dfs(t[x].r,time-i);
		//cout<<x<<" "<<u<<" "<<v<<endl;
		if(u+v+t[x].w>dp[x][time]) dp[x][time]=u+v+t[x].w;
	}
	return dp[x][time];
}

int main()
{
	freopen("gallery.in","r",stdin);
	freopen("gallery.out","w",stdout);
	scanf("%d",&TIME);
	num=0;
	plant(1,0);
	cout<<dfs(1,TIME-1);
	/*for(int i=1;i<=num;i++)
	{
		cout<<i<<" "<<t[i].tm<<" "<<t[i].w<<endl;
		if(t[i].l>-1) cout<<"l:"<<t[i].l<<" ";
		if(t[i].r>-1) cout<<"r:"<<t[i].r<<endl;
	}*/
	return 0;
}

回复

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

正在加载回复...