上一页 1 2 3 4 5 6 ··· 34 下一页
摘要: 思路参考自http://blog.csdn.net/yylxid/article/details/8601075题意:给定一个三角形的周长n, 问能组成的三角形的个数。若三边均不等,则个数加一分析:假定三角形的三条边长分别为x , y , z 其中 x <= y <= z若x已知, 则可得 y + z = n - x令 z - y = t , 则 0 <= t < x (俩边之差小于第三边)将t 代入上式可得 y = (n - x - t) / 2;则 (n - 2x) / 2 < y <= (n - x) / 2 即 n / 2 - x + 1 <= 阅读全文
posted @ 2013-04-01 19:18 枕边梦 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个序列,要求完成俩个操作1)查询区间[l,r] 的和2)区间更新, 区间每一个数都异或一个数x对每一个查询输出结果分析:对区间更新和查询这种操作,比较明显的就想到了线段树。区间查询比较简单,关键是区间更新该如何解决。我们为线段数的每一个节点开一个cnt[20] 的数组,保存该区间内每一个数二进制位上1的个数,cnt[0] 表示对应区间内所有数第一个二进制数上1的个数和,这样,针对每一个异或操作,我们可以这样解决: for(int i = 0; i < L; ++i) { if(!(v & ( 1 << i) )) continue;//针对异或操作的性质, 阅读全文
posted @ 2013-03-10 13:14 枕边梦 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 最近做了一些动态规划的题目,稍微回顾一下hdu2517 棋盘分割题意:中文题……分析:这个题目在黑书上面有,主要是将公式稍微转换一下hdu2517#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<stdlib.h>#include<math.h>using namespace std;const int N = 10;const int M = 20;const int n = 8;double dp[M][N] 阅读全文
posted @ 2013-03-09 01:00 枕边梦 阅读(783) 评论(0) 推荐(2) 编辑
摘要: 与二分图不同,一般图的最大匹配用的是带花树开花算法。当然,本质都是寻找增广路。下面的模板是来自这个博客的http://fanhq666.blog.163.com/blog/static/8194342620120304463580/ural1099(模板)#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int NMax=230;int Next[NMax];int spouse[NMax];int belong[NMax];int findb(in 阅读全文
posted @ 2013-03-08 22:57 枕边梦 阅读(2454) 评论(0) 推荐(0) 编辑
摘要: 题意:求A 串中不在 所有B串中出现大不同子串的个数分析:后缀数组可以很简单的实现求一个串不同字子串的个数,,从这方面下手就很容易想到了,之前比赛的时候,,死活没想法先将所有串拼接起来,计算不包含分隔符的不同子串的个数sumAB,再单独将所有B串拼接起来,同样的方法求一遍,得到sumB,sumAB-sumB即为所求View Code #include <iostream>#include <algorithm>#include <string.h> #include <math.h>#include <string>int const 阅读全文
posted @ 2012-10-08 00:04 枕边梦 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个n+1个点的有向图和起点,求经过其余n个点然后回到起点的最短路径。。(n<=10)分析:看到这么小的数据,就知道不是普通的最短路了,首先,n 这么小,应该联想到的应该是状态压缩吧,每一个位表示经过了哪一个点。。。dp[i][j] 表示到达点i 状态为j 时的最短路径长度,一开始忽略了一点,就是更新过的点,完全有可能再更新的,所以不能单纯记录是否更新过该状态,所以就想到了用spfa,将更新过的点入队,,继续拓展……View Code #include<iostream>#include<algorithm>#include<queue>us 阅读全文
posted @ 2012-08-29 10:29 枕边梦 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一棵有n(n < 100001 )个结点的带边权的树,处理以下一共q(q < 100001)个操作:1,改变树的一条边的权;2,求给定点和某点的距离,后者是编号为1的结点,若是第一次执行操作2,否则为上次执行操作2的给定点。分析:如果没有操作1 的话,也就是边的权值没有改变的话,是很常见的LCA转RMQ问题; 如果边 的权值发生改变了的话,是否意味预处理出来的数据都没用了呢?其实不然,改变一条边的权值,对那些边造成影响是固定的,也就是说,如果欧拉序列固定了,改变了一条边的权值,那么整个子树的dis[]值(到根节点的距离)都改变了,而在欧拉序列中,整个子树是连续的,,只需要 阅读全文
posted @ 2012-08-13 22:17 枕边梦 阅读(202) 评论(0) 推荐(0) 编辑
摘要: pku 2762 Going from u to v or from v to u?题意:给定一个有向图,对任意一对x,y,判断是否存在x到y 或 y到x 的路径。。。分析:首先,可以想到的是,强连通缩点,因为对于一个极大强连通分量,任意俩点均可达,所以先缩成一个点,,缩点之后,得到的是一个DAG,判断图是否为弱连通图==》即判断拓扑序列是否唯一pku2762#include<iostream>#include<algorithm>#include<vector>#include<stack>#include<queue>#inclu 阅读全文
posted @ 2012-08-11 11:57 枕边梦 阅读(1044) 评论(0) 推荐(0) 编辑
摘要: 【2-sat】专题~2-sat是一个逻辑性很强的算法,但是其套路比较固定,所以不是很热,题目很少,但也不乏AC后让人大呼爽快的好题,下面放出两篇极品论文还有几道题目的题解以供交流~~2-sat学习:对称性解决2-sat的ppt赵爽的2-SAT解法浅析论文强连通判是否存在解:HDU 3062Party [入门]2-sat入门题,建图后求强连通判断是否有解即可View Code 1 #include<cstdio> 2 #include<cstring> 3 usingnamespace std; 4 #define MIN(x,y) (x<y?x:y) 5 #def 阅读全文
posted @ 2012-08-09 14:15 枕边梦 阅读(211) 评论(0) 推荐(0) 编辑
摘要: multiset 第一次用,太神奇了题意:push a 把a压栈;pop b 把小于等于b的所有元素中最大的元素的出栈,若没有则输出“No Element!”!View Code #include<iostream> #include<stdio.h> #include<set> using namespace std; int main() { multiset<int> st; multiset<int>::iterator it; int n; char op[5]; int tp; while(scanf("%d&q 阅读全文
posted @ 2012-05-25 22:32 枕边梦 阅读(270) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 34 下一页