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的儿子


注意:若本人买家庭票,他的儿子也可以照买家庭票。

posted on 2011-07-21 22:06  风也轻云也淡  阅读(131)  评论(0编辑  收藏  举报