摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4281题意:给出N个点,第一个点是裁判,其他N-1个点需要裁判过去回答问题,每个点需要的时间不一样,而每个裁判最多能回答M分钟的问题。题目分两问,第一问是如何分配可以使使用的裁判数最少,第二问是如何分配裁判,使裁判走过的总路程和最少,裁判一开始都在1,最终也要回到1。思路:首先我们可以把符合条件的集合预处理出来,然后对于第一问,可以用状态压缩解决,dp[state]表示该状态下的最少裁判数,对于第二问,就是多旅行商问题了,dp[i][j]表示状态为i,在位置j的最小花费,然后开一个best数组来保存 阅读全文
posted @ 2013-10-07 20:22 ihge2k 阅读(573) 评论(0) 推荐(1) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25915题意:求一个数不断地除以他的因子,直到变成1的时候 除的次数的期望。思路:设一个数的约数有num个,E[n] = (E[a[1]]+1)/num+(E[a[2]]+1)/num+...+(E[a[num]]+1)/num+1 ,而a[num]==n,于是整理得:E[n]=(E[a[1]]+E[a[2]]+...+E[a[num-1]]+num)/(num-1)。然后预处理出所有的结果。 1 #include 2 #include 3 #include 4 阅读全文
posted @ 2013-10-07 15:41 ihge2k 阅读(244) 评论(1) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25914思路:dp[state]表示当前状态下要消耗的最小的shots。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define inf 1<<30 7 8 int n,val[17],dp[1<<17]; 9 char map[17][17];10 11 int main()12 {13 int _case,t=1;14 scanf(&quo 阅读全文
posted @ 2013-10-07 15:15 ihge2k 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25913思路:易证存在一条从左上角到右下角的折线,沿着格子边缘的...其中处于折线下方的全部运送到左边去,其他运送到上边去...那么这个折线就相当于从上面走到下面得分最大...直接dp就可以。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define FILL(a,b) memset(a,b,sizeof(a)) 7 8 int n,m,Ura[555][555],R. 阅读全文
posted @ 2013-10-07 11:12 ihge2k 阅读(182) 评论(0) 推荐(0) 编辑