上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 61 下一页
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1531差分约束的题之前也碰到过,刚好最近正在进行图论专题的训练,就拿来做一做。①:对于差分不等式,a - b = c ,建一条 b 到 a 的权值为 c 的边,求的是最长路,得到的是最小值③:存在负环的话是无解。④:求不出最短路(dist[ ]没有得到更新)的话是任意解说明一下为什么存在负环就是无解?我们的目标是求不等式的解,而不等式的解正是超级源点到各点的最短距离,而如果存在负环的话,是无法求得最短距离的,从而也就无法求出不等式的解。回到本题,我们可以设s[i] = a[1] + a[2] + … 阅读全文
posted @ 2013-07-31 19:57 ihge2k 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3621思路:之前做过最小比率生成树,也是属于0/1整数划分问题,这次碰到这道最优比率环,很是熟悉,可惜精度没控制好,要不就是wa,要不就是tle,郁闷啊!实在是懒得码字,直接copy吧:题目的意思是:求一个环的{点权和}除以{边权和},使得那个环在所有环中{点权和}除以{边权和}最大。令在一个环里,点权为v[i],对应的边权为e[i], 即要求:∑(i=1,n)v[i]/∑(i=1,n)e[i]最大的环(n为环的点数), 设题目答案为ans, 即对于所有的环都有 ∑(i=1,n)(v[i])/∑(i=1,n)(e[i])=∑(i. 阅读全文
posted @ 2013-07-31 16:49 ihge2k 阅读(1385) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3662思路:这题较多的有两种做法:方法1:二分枚举最大边长limit,如果图中的边大于limit,则将图中的边当作1,表示免费使用一次,否则就当作0,这样只需判断dist[n]与k的大小,然后继续二分边长就可了。方法2:bfs+优先队列,dp[i][j]表示到顶点i,免费使用了j条边的最小花费,于是对于下一个即将要选择的点,那么就有两种选择了,一种是免费使用这条边,另一种是不免费,则花费为q.cost=max(p.cost,w),不断进出队列更新即可。http://paste.ubuntu.com/5931748/ 阅读全文
posted @ 2013-07-31 14:46 ihge2k 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3635思路:本题主要运用的还是贪心思想,由于要求st->ed的最小花费,那么每经过一个城市,能不加油就尽量不加油,用dp[i][j]表示在顶点i,剩余燃料为j是的最小花费,于是每走到一个城市,可以选择不加油,也可以选择加1,2,3...,个单位的油,然后用优先队列来保存每个状态,如果有更小的花费,就入队列,这样直到第一次到达终点,此时花费就是最小的了。http://paste.ubuntu.com/5931435/ 阅读全文
posted @ 2013-07-31 12:13 ihge2k 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628思路:首先把所有的回文找出来,如果当前状态为回文,则dp[state]=1,否则dp[state]=inf.然后就是枚举所有的状态:若当前状态为state,枚举子状态(substate=(substate-1)&state),则有dp[state]=min(dp[state],dp[substate^state]+dp[substate])(其中(substate^state)表示删除substate后的状态。最后就是要求dp[(1<<len)-1]了。http://pas 阅读全文
posted @ 2013-07-31 09:58 ihge2k 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4462思路:由于数据不大,可以直接将所有的状态表示出来,然后枚举,判断能否将方格全部覆盖。http://paste.ubuntu.com/5928952/ 阅读全文
posted @ 2013-07-30 21:07 ihge2k 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3615思路:map[i][j]表示顶点i,j之间的最高的障碍物,于是题目要求的是最高障碍物的最小值,不就是min(map[i][j],max(map[i][k],map[k][j]))嘛.http://paste.ubuntu.com/5925170/ 阅读全文
posted @ 2013-07-29 21:00 ihge2k 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3613思路:我们知道如果矩阵A表示经过1条边的方案数,那么A^N矩阵就代表这经过N条边的方案数,而本题中要求经过N条边的最短距离,于是我们可以把原来矩阵的乘法改成加法,这在08年国家队的一篇论文中有证明:《矩阵乘法在信息学中的应用》。至于怎么求A^N矩阵,二分即可。http://paste.ubuntu.com/5925042/ 阅读全文
posted @ 2013-07-29 20:16 ihge2k 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3328思路:这道题花了我将近3个小时,结果发现是方向搞错了,orz,过了样例之后提交wa,然后换成优先队列就过了.其实题目意思很简单,就是说一个人从S点起跳,如果先前是左脚(右脚)着地,那么之后只能往某一个特定的区域跳,而经过仔细观察之后可以发现,这块区域可以统一来表示,这样的话就相当于是一个二维平面上的最短路了,只不过是多源多终点,然后我们用一个状态来标记当前的位置以及走的时间和跳的方向,由于使用了优先队列,则找到第一个终点就直接返回就行了。http://paste.ubuntu.com/5922030/ 阅读全文
posted @ 2013-07-28 23:24 ihge2k 阅读(508) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3311思路:Floyd + 状态压缩DP 题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短 (可重复走).首先不难想到用FLOYD先求出任意2点的距离dis[i][j] 。接着枚举所有状态,用11位二进制表示10个城市和pizza店,1表示经过,0表示没有经过 。定义状态DP(S,i)表示在S状态下,到达城市I的最优值 。接着状态转移方程:DP(S,i) = min{DP(S^(1<<i-1),k) + dis[k][i],DP(S,i)},器重S^(1<< 阅读全文
posted @ 2013-07-28 19:55 ihge2k 阅读(564) 评论(0) 推荐(0) 编辑
上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 61 下一页