上一页 1 ··· 94 95 96 97 98 99 100 101 102 ··· 121 下一页
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1538题意:最短路问题,但是要求出最短路的条数,同时要求出所有可能的最短路选择中javabean最多的情况。思路:求到终点的最短路径用Dijkstra,其路径更新条件(如果到某个点有多个路径长度一样的最短路径,则选择豆子总数最多的)就是直接加个else if条件就搞定了,最后就是dfs搜一下最短路的条数了,这个我就记忆化了一下。然后我一开始使用spfa写的,wa了好多次,orz...改成dijkstra就过了。 1 #include<iostream> 阅读全文
posted @ 2013-05-14 21:53 ihge2k 阅读(329) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1067思路:学会了手写Hash。。。orz....纪念一下。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<queue> 6 using namespace std; 7 #define MAXN 1000007 8 typedef long long ll; 9 ll Hash[MAXN]; 10 11 st 阅读全文
posted @ 2013-05-14 16:44 ihge2k 阅读(723) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2438网上大牛思路:可以根据边界,汽车已经转弯,设水平方向为x轴,垂直方向为y轴。则汽车的内边界(靠近里面的边界)的直线方程式f(x)为:y=x*tan(a)+l*sin(a)+d/cos(a).其中a是汽车与x轴的夹角当y=X时,求解出的-x即为汽车的内边界到y轴的距离h,若h小于Y即可转弯,若大于Y就不能转弯。所以只需要利用方程式,求-x的最大值,即可判断能否通过。由于f(x)是凸函数(随着x的增大y先增大后减小),所以,需要借助三分求解。图示:第一道三分求极值题啊!!! 1 #include 阅读全文
posted @ 2013-05-14 12:30 ihge2k 阅读(1365) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160思路:就是排序后求最长递增子序列,只不过多了一个判断(s下降)以及最后输出下标,我们可以用一个pre[]数组来记录路径,最后递归输出就行了。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 1010 7 struct Mice{ 8 int w,s,id; 阅读全文
posted @ 2013-05-13 21:55 ihge2k 阅读(444) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1252题意都读了半天,orz...给出n个结点,每两个结点之间都有一个线路想通,不过有不同的颜色,然后给三个piece,分别在三个初始位置,piece移动的条件是通过的路径的颜色必须要与另外两个piece所在位置之间的路径颜色想同,求使三个点移动到同一个位置上所需要的最小步数……开个三位数组记录一下状态就好了,简单bfs.View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 阅读全文
posted @ 2013-05-12 23:25 ihge2k 阅读(324) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1307先说一下题意,就是给你n维起始点和终点的坐标,然后后面给出一系列的点,每一行表示这两个点之间有通路,最后让你判断一下能否从起点出发走到终点。由于最多不超过10维,那么我们把每个点的坐标转化为一个整数,然后建邻接表,这样dfs就可以了(值得注意的是我们用set来判重,当然你也可以用数组什么的)可以说是dfs+map+set的妙用了!View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath&g 阅读全文
posted @ 2013-05-12 22:12 ihge2k 阅读(396) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1226思路:广搜,每一个状态用一个结构体来保存,记录数组的长度,然后根据长度来扩展就可以了,这里值得注意的地方余数判重以及求大数取模。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<queue> 6 using namespace std; 7 #define MAXN 555 8 #defi 阅读全文
posted @ 2013-05-12 19:59 ihge2k 阅读(307) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2610http://acm.hdu.edu.cn/showproblem.php?pid=2611、很好的两道搜索题,都用到了判重。。。orz....不怎么会,看了大牛的解题报告才理解。。。跪神牛大牛的hdu 2610思路:题意很简单就是在给定的序列中找到固定个数的递增的子序列,如果子序列的总个数少于要求的个数,那么就把所有的子序列输出即可,注意每组测试用例就为有一空行。技巧一:重判,这里有两个重判,第一个重判是判断如果搜索的是子序列的第一个元素,那么判断从原始序列开始到当前位置是否已经出现过该元素 阅读全文
posted @ 2013-05-12 17:44 ihge2k 阅读(874) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2897转引:巴什博弈的变形:假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次外其他每次取得石子个数必须在[p,q]之间。若当前石子共有n=(p+q)*r个,则A必胜,必胜策略为:A第一次取q个,以后每次若B取K个,A取(p+q-k)个,如此下去最后必剩下p个给B,所以A必胜。若n=(p+q)*r+left个(1<left<=p)B必胜,必胜策略为:每次取石子活动中,若A取k个,则B去(p+q-k)个,那么最后剩下left个给A,此时left<=p,所以A只能一次去完,B 阅读全文
posted @ 2013-05-12 00:14 ihge2k 阅读(747) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1514思路:orz...大牛讲的太妙了:题意是给4堆(堆的高度小于等于40)有颜色(颜色的种类小于等于20)的物品,你有一个篮子最多能装5件物品,每次从这4堆物品里面任取一件物品放进篮子里,但是取每堆物品时,必须先取上面的物品,才能取下面的物品,如果发现篮子里的两种物品的颜色一样,那么把这两种物品拿出来,问最后最多能拿出多少对物品?;解题思路:记忆化搜索+dp+状态压缩;因为40×40×40×40不会太大,所以可以用dp[x[1]][x[2]][x[3]][x[4]]记 阅读全文
posted @ 2013-05-11 23:51 ihge2k 阅读(360) 评论(0) 推荐(0)
上一页 1 ··· 94 95 96 97 98 99 100 101 102 ··· 121 下一页