P1270 “访问”美术馆——不太一样的树形DP

P1270 “访问”美术馆

dfs读入,存图有点像线段树;

在枚举时间时,要减去走这条边的代价;

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=; struct node
{
int tim,pic;
}t[maxn];
int s; void read(int x)
{
scanf("%d%d",&t[x].tim,&t[x].pic);
t[x].tim*=;
if(!t[x].pic)
{
read(x<<);
read((x<<)+);
}
} int dp[maxn][maxn]; void dfs(int x,int ti)
{
if(dp[x][ti]||!ti) return ;
if(t[x].pic)
{
dp[x][ti]=min(t[x].pic,(ti-t[x].tim)/);
return ;
} for(int i=;i<=ti-t[x].tim;i++)
{
dfs(x<<,i);
dfs((x<<)+,ti-i-t[x].tim);
dp[x][ti]=max(dp[x][ti],dp[x<<][i]+dp[(x<<)+][ti-i-t[x].tim]);
}
} int main()
{
scanf("%d",&s);
s--;
read();
dfs(,s);
printf("%d",dp[][s]);
return ;
}
上一篇:【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)


下一篇:2015必须要看的APP源码