摘要: 第一年参加现场赛,比赛的时候就A了这一道,基本全场都A的签到题竟然A不出来,结果题目重现的时候1A,好受打击 ORZ.....题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4800题目大意:给定C(3,N)支队伍之间对战的获胜概率,再给定一个序列存放队伍编号,每次获胜之后可以选择和当前战胜的对手换队伍。问按给定序列依次挑战全部胜利的最大概率。解题思路:状压DPdp[i][j]表示使用队伍i从编号j开始挑战全胜的概率,ai[i]表示i位置的队伍,rate[i][j]表示队伍i战胜队伍j的概率。状态转移方程:dp[i][j]=r[i][ai[j]]* 阅读全文
posted @ 2013-12-01 17:41 飞火扑蛾 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203解题思路:简单的01背包,用dp[i]表示花费不超过i时的最大可能性状态转移方程 dp[i]=1-(1-dp[i-a])*(1-p) 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 10001 8 int n,m; 9 double dp[N];10 int main()11 {12 int i,a,j;13 double p,pp;14 ... 阅读全文
posted @ 2013-11-04 13:05 飞火扑蛾 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175解题思路:从出发点开始DFS。出发点与终点中间只能通过0相连,或者直接相连,判断能否找出这样的路径。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 1005 8 #define M 1005 9 int map[N][M],n,m;10 bool vis[N][M],ok;11 int move[4][2]={{1,0},{-1,0},{0,1},{0,-1}} 阅读全文
posted @ 2013-10-31 20:52 飞火扑蛾 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://codeforces.com/problemset/problem/358/D开始题意理解错,整个就跪了= =题目大意:从1到n的位置取数,取数的得到值与周围的数有没有取过有关,所有数都要取,求最终得到的最大结果解题思路:dp题,转移方程如下dp[i][0]=max(dp[i-1][0]+b[i-1],dp[i-1][1]+c[i-1])dp[i][1]=max(dp[i-1][0]+a[i-1],dp[i-1][1]+b[i-1])a,b,c分别表示周围没有数,有一个数,有两个数取过的情况。dp[i][0]表示取i个位置时,i-1没取过的情况。(实际取数的情况,先i, 阅读全文
posted @ 2013-10-26 10:21 飞火扑蛾 阅读(536) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://codeforces.com/problemset/problem/350/B一开始想复杂了,建了张图,结果效率太低T了。其实用数组存可以了,结果发现的时候快没时间了,修改好前5分钟比赛就结束了,泪目。。。题目大意:每个地点有用1表示旅馆,用0表示是山地。每个地点用一个数表示能从哪一个地点到达这里(单向)。现在要求一条最长的路径,除了终点为旅馆外,前面的路径上都是山地。要求前面的路上不能有分岔路,即从该点出发只有一条可行路。解题思路:开一个数组存到达该点的始发地,再开一个数组存以某点为起点的路径有几条,不为1即可删去不计。然后从每一个旅馆开始向前深搜,找出最长的路径。 阅读全文
posted @ 2013-10-04 12:33 飞火扑蛾 阅读(554) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://codeforces.com/problemset/problem/348/A题目大意:N个人中找出1个人主持,剩下N-1个人参与游戏,给出每个人想参与游戏的次数,问要满足每个人最少要玩多少轮游戏。我的算法会烦一点:首先找出所有人中想参与游戏的最大次数max,即可能的最小解ans。然后用这个max去减每个人想要参与游戏的次数,得到在max次游戏中每个人能够当主持的次数。把这些次数加起来得到b,与max的大小进行比较,如果b>=max则说明满足了每个人人的期望。否则,ans+1,然后b+n-1,(即除了想参与max次数的人当主持的次数都+1),再进行比较,直到找到b 阅读全文
posted @ 2013-09-28 16:30 飞火扑蛾 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751题目大意:判断一堆人能否分成两组,组内人都互相认识。解题思路:如果两个人不是相互认识,该两人之间连边。最终构成一张图,二分匹配。 1 #include 2 #include 3 #include 4 using namespace std; 5 #define maxn 105 6 #define maxm 20010 7 int n,e; 8 bool path[105][105],flag; 9 int first[maxn],next[maxm],v[maxm];10 int color 阅读全文
posted @ 2013-09-21 23:58 飞火扑蛾 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4749题目大意:给一个原序列N,再给出一个序列M,问从N中一共可以找出多少个长度为m的序列,序列中的数的相对大小关系与序列M中相对大小关系相同。(序列之间不能重叠)解题思路:从头开始以i为起点暴搜,不断找长度为m的序列,判断是否满足条件。若满足,跳到i+m之后继续搜,若不满足,向后移一位继续搜。判断方法压缩数据比较相对大小。 1 #include 2 #include 3 #include 4 using namespace std; 5 int N[100005],M[100005]; 6 int 阅读全文
posted @ 2013-09-21 23:37 飞火扑蛾 阅读(488) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4737题目大意:给定一系列数,F(i,j)表示对从ai到aj连续求或运算,(i=m时所有的i=m时通过右移i来使F(i,j) 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int tmp[32],last; 8 long long A[100005]; 9 long long m,now; 10 int n; 11 void getin(long long x) 12 { 13 int... 阅读全文
posted @ 2013-09-14 21:59 飞火扑蛾 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722Good NumbersTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 422Accepted Submission(s): 146Problem DescriptionIf we sum up every digit of a number and the result can be exactly divided by 10, we say 阅读全文
posted @ 2013-09-11 23:14 飞火扑蛾 阅读(319) 评论(0) 推荐(0) 编辑