摘要: 题意:一个电视网络要转播一场比赛,电视网络的拓扑结构是一棵树,树根是总站,叶子结点都是用户,树边权为信号通过此边的费用,转播总费用为信号通过的所有边的权和,现已知每个用户愿意交付的费用,问电视台在不亏本的情况下最多能为多少用户转播比赛。分析:定义dp[i][j]为从结点 i 往下给 j 个用户转播比赛的最大利润,最后的答案就是使 dp[1][j] 非负的最大的j,可以二分求解。dfs里面那个 j 循环需要根据叶子结点的数目进行优化,否则会TLEView Code #include <stdio.h>#include <string.h>#include <algo 阅读全文
posted @ 2012-09-18 17:30 BeatLJ 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 题意:从时间0开始需要接待n个人,对于每个人,可以选择接待或者跳过,若接待,花费的时间是T+ai ,T为开始接待这个人的时间,若跳过则罚时bi ,现给定总时间K,问你最多能接待多少人?分析:如果接待的人的集合确定了,那你一定先接待 bi 小的人再接待 bi 大的人,所以我们可以先按 b 从小到大排序。定义dp[i][j]表示从 i 到 n 的人共接待 j 个人的花费(i 到 n这一段的花费)。dp[i][j]=min( dp[i+1][j] , dp[i+1][j-1] - a[i] + j*b[i] ),最后从大往小找dp[0][j]不超过K的最大的 j 即是答案。View Code #in 阅读全文
posted @ 2012-09-18 17:18 BeatLJ 阅读(291) 评论(0) 推荐(0) 编辑