EOJ:Let's Go to the Movies
——problem:有一群人去看电影,票有两种,一种是单票,一种是家庭票(允许一个家长和他所有子女),问怎样钱最少(相同情况取票数少的)
——solution:树形DP
——url:http://202.120.106.94/onlinejudge/problemshow.php?pro_id=53
——————————————————————————————————
最开始的想法是从上而下,由祖先开始,假设父节点买家庭票或单票两种情况往下推。然后发现这样做方程都写不出。
正确的是
dp[x][0]表示使用个人票的耗费,dp[x][1]表示使用家庭票的耗费。
如果不考虑使用票的数目,可以有如下方程:
vs为个人票价格,vf为家庭票价格
dp[x][0] = vs + sigma min(dp[sub][0], dp[sub][1])
dp[x][1] = vf + sigma min( dp[sub][0] - vs, dp[sub][1] )
sub为x的儿子
注意:若本人买家庭票,他的儿子也可以照买家庭票。