摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4293思路:这题dp的状态比较难想,dp[i]表示前i个人最多有多少人说真话,而num[i][j]表示当前人的前面有i个人,后面有j个人的个数,于是有dp[i]=max(dp[i],dp[j]+num[j][n-i])(0<=j<i); 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define MAXN 555 6 int n 阅读全文
posted @ 2013-05-29 22:31 ihge2k 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560思路:dfs判环,这里成环的条件是环中的每个点的出度和入度都为1,因此dfs的时候只须判断的相连的每个点的size()==2即可。ps:为防暴栈手动开栈:#pragma comment(linker,"/STACk:10240000,10240000") 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #in 阅读全文
posted @ 2013-05-29 19:18 ihge2k 阅读(542) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034思路:要对floyd有深刻的理解才能A这道题,边数最多的情况是每两点之间都有最短的直边相连,故最多为n*(n-1),在每两点都有最短直边相连情况下,我们可以一一删去多余的边,最后就是最终结果。即若dist[i][j]=dist[i][k]+dist[k][j],则i 与 j的这条边可以删去.若dist[i][j]>dist[i][k]+dist[k][j],则说明dist[i][j]并不是最短路,存在矛盾,此时则不存在这样的图,输出impossible。 1 #include 2 #in 阅读全文
posted @ 2013-05-29 18:23 ihge2k 阅读(271) 评论(0) 推荐(0) 编辑