- 博客(10)
- 资源 (3)
- 收藏
- 关注
原创 hdoj 3038How Many Answers Are Wrong 并查集
思路:以区间标号大的为根建树,sum[a] 表示从a+1开始到当前根节点的和。剩下的就是并查集的操作了。#include #include #include using namespace std;const int N = 200100;int p[N], sum[N];int ans, n, m;void init() { int i; ans = 0
2012-04-15 12:13:41 754
原创 poj 3268 Silver Cow Party
思路:单源最短路,套用spfa模板,这里需要构造逆向边,调用两次spfa。#include #include #include #include #include using namespace std;const int N = 10009;const int inf = 1<<30;typedef struct node { int v, w, next;}
2012-04-13 14:27:57 645
原创 hdoj 4006 The kth great number
思路:用优先队列维护前k个大的元素,每次查询时,队首元素即为所求答案。#include #include #include #include #include using namespace std;priority_queue, greater > q;int main(){ int n, k; while (scanf("%d %d", &n, &k)
2012-04-12 17:26:36 608
原创 hdoj Buy the Ticket
算法分析:首先假设人无区别令f(m,n)表示有m个人手持¥50的钞票,n个人手持¥100的钞票时共有的方案总数。则可以分以下情况讨论这个问题:(1)当n=0时 n=0意味着排队购票的所有人手中拿的都是 ¥50的钞票,那么这m个人排队方案总数为1。(2)当m(3)其他情况: 考虑(m+n)个人排队购票的情景,第(m+n)人站在第(m+n-1)个人的后面,则第(m+n
2012-04-10 13:47:30 888
原创 hdoj 4198 Quick out of the Harbour 优先队列 + bfs
思路:对于普通迷宫求解,bfs可以到到唯一解,也是最优解。但对于不同点具有不同权值的地图就不一定了,很可能最优值会被pass掉,但使用优先队列的话,访问当前的点总是以前一个优先权最高的点访问的。#include #include #include #include #include using namespace std;const int N = 509;struct n
2012-04-07 18:41:38 808
原创 hdoj 1147 Pick-up sticks 计算几何
思路:判断第i根木棍是否在顶上,只需判断它是否被第i+1到第n根覆盖,并标记被覆盖的木棍。#include #include #include #include using namespace std;const int N = 100009;struct Point{ double x, y;};struct Line { Point p1, p2;
2012-04-04 16:54:35 1005
原创 hdoj 1257 最少拦截系统
思路:用一数组dp[]维护需要系统的个数以及每套系统可以拦截的导弹的最低高度,显然dp[1] = a[1](a[]表示所有导弹),若一导弹的高度大于当前系统所达到的高度,则说明需要新加一个系统,值为当前导弹的高度,可以看出dp[j] > dp[i](0#include #include #include #include using namespace std;const i
2012-04-02 17:59:42 894
原创 ural 1306. Sequence Median
思路:此题不能存储所有元素,否则会MLE,想到用优先队列(默认值大的优先级高),存储一半,剩下的一半依次和队首比较,若小于队首,则将队首元素出队,新元素入队。最后,若n为奇数,队首元素即为中间值;n为偶数,队列前两个的平均值为答案。#include #include #include #include #include using namespace std;typedef
2012-04-02 14:57:19 1109
原创 ural 1654 Cipher Message
思路:数据结构的题目,模拟栈的操作:若栈为空,则将原串的字符入栈,若栈不为空且栈顶元素与原串中的相同,则出栈;新入栈的元素需同之前的比较,若相同都出栈。#include #include #include #include using namespace std;const int N = 250009;char s[N];char ans[N];int main(voi
2012-04-02 09:30:57 989
原创 ural 1073. Square Country 动态规划
题意:给定一个数N,求组成N的最少的平方数的个数。思路:动态规划,我们知道dp[1] = 1,dp[2] = 2, dp[3] = 3, dp[4] = 1...若 n = i+j*j,则dp[n] = min(dp[i]+1)(i+j*j=n)#include #include #include using namespace std;const int N = 6000
2012-04-01 20:23:58 622
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人