随笔分类 -  OJ--POJ

摘要:http://poj.org/problem?id=1860模板提 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 #define INF 0xfffffff11 double dis[110],v;12 int n,m;13 struct node14 {15 int r,c;16 double r1,c1,r2,c2;17 }p[110];18 int bell_ford(int s)19 {20... 阅读全文
posted @ 2014-01-17 15:56 _雨 阅读(200) 评论(0) 推荐(0)
摘要:1037带点组合的东西吧黑书P257 其实我没看懂它写的嘛玩意儿这题还是挺不错的 一个模糊的思路可能会好想一些 就是大体的递推方程 dp1[][]表示降序 dp2[][]表示升序 数组的含义为长度为i的第一个数为j且相对第一个数为升或降的排列数 当然j肯定要小于等于i的 dp1[i][j] = dp1[i][j]+dp2[i-1][k](k》=1&&k<j)同理 dp2[i][j] = dp2[i][j]+dp1[i-1][k](k>=j&&k<i) 这里是因为dp2[i][j]中的j取不到i(因为后面还要升,就肯定取不到i);这样任务完成了一半了 一定要深刻理解两个dp数组的含义 不然后半部 阅读全文
posted @ 2013-10-18 20:00 _雨 阅读(205) 评论(0) 推荐(0)
摘要:链接找循环节 然后所有子循环节的最小公倍数就是总的循环节 找结果的时候也按一个个置换来进行转换 不然也TLE 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define LL long long10 int p[210];11 char s[210];12 char ss[210],sq[210];13 int vis[210];1... 阅读全文
posted @ 2013-09-20 10:23 _雨 阅读(239) 评论(0) 推荐(0)
摘要:链接这个东东是新知识 let's 从头学起吧这篇文库讲的不错 至少把各种概念学了一遍然后再看此题 共有两种类型的置换 一种是旋转之后相同算一种 一种是翻转之后相同算一种对于旋转 共有N次置换 转1下到转N下 对于每一次的循环节 各大牛给出了结论 为gcd(n,i) 这个我也不会证 姑且记住吧对于翻转 这个从图中可以看出来 找对称轴 分2种情况if n%2==0也分两种情况 若以两个相对的珠子为对称轴 那循环节为(n-2)/2+2若以 其它不含珠子的线为对称轴 循环节为n/2 个置换n/2次else (n-1)/2+1然后 就可以按ploya定理做了 文库有讲 就不说ploya是什么了 阅读全文
posted @ 2013-09-19 18:25 _雨 阅读(303) 评论(0) 推荐(0)
摘要:链接对于组合数学是一点也不了解讲解重要一点 要知道一个循环里最少的交换次数是m-1次 、 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 10010 8 #define INF 0xfffffff 9 int a[N],b[N],po[N*10],vis[N*10];10 int main()11 {12 int i,n;13 while(scanf("%d",&n)!=EOF)14 {15 memset(vis,0,si... 阅读全文
posted @ 2013-09-19 09:45 _雨 阅读(205) 评论(0) 推荐(0)
摘要:链接这题意好难懂 看得迷迷糊糊 想的也迷迷糊糊 后来睡了会突然想到了。。不就是类似以前的矩阵操作从右下角记忆化 大的由小的推来dp[i][j] = max(dp[i-1][j]+s1,dp[i][j-1]+s2) s1 = a[i][g]+..a[i][j] s2 = b[g][j]+..b[i][j] 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int dp[550][550]; 8 int n,m; 9 int a[550][550];10 int b[550][550];. 阅读全文
posted @ 2013-09-17 18:39 _雨 阅读(280) 评论(0) 推荐(0)
摘要:链接状态转移好想 不过有坑 大家都犯的错误 我也会犯 很正常就是锤子可以移到n*n以外 要命的是我只加了5 以为最多不会超过5 WA了N久 才想到 上下两方向都可以到5 所以最多加10以时间和坐标进行DP 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 1010 9 #define M 3210 struct node11 {12 int x[N],y[N];13 }f[M][M];14 int o[12][M][M];15 int... 阅读全文
posted @ 2013-09-17 14:59 _雨 阅读(193) 评论(0) 推荐(0)
摘要:链接确实是破题 按复杂度估计怎么着也不能按坐标D 啊网上的代码交上去还TLE 无语了 多次TLE之后终于看到一次WA。。好高兴以横坐标进行DP dp[j] = min(dp[j],dp[2*x[i]-j]+1) 这个2*x[i]-j其实是 j+2*(x[i]-j]) 由当前坐标可以由没跳这个个建筑物i之前的坐标推来限制条件为 (j-x[i])*(j-x[i])+(y[i]-y[1])*(y[i]-y[1])>y[i]*y[i]; 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namesp 阅读全文
posted @ 2013-09-16 20:56 _雨 阅读(204) 评论(0) 推荐(0)
摘要:链接神奇的扫描线啊估计之前刷面积并的时候太急了 没来得及理解 。。有一大段代码是与面积并一模一样的 都是离散化 更新面积并是扫描的x 这次也一样因为周长只算外围的 所以扫描到一条x边时 要减去上一次扫描到的 对于Y方向上 就是与面积并不大一样的地方了看篇带图的讲解吧 网上的题解都大同小异 估计出自一人之手http://blog.sina.com.cn/s/blog_691ce2b7010177dz.html它是扫描的Y 其实方法是一样的 横过来就是对于我的代码 自己感觉不好理解在于求区间数 1 #include 2 #include 3 #include 4 #include 5 ... 阅读全文
posted @ 2013-09-13 19:38 _雨 阅读(298) 评论(0) 推荐(0)
摘要:链接这树着实不好理解啊讲解http://www.cnblogs.com/pony1993/archive/2012/07/17/2594544.html对于找K值 右区间的确定不是太理解。。先当模板贴着吧 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 100010 8 int tree[20][N],sum[20][N];//每层的数 及每层截止到i会放进左子树的个数 9 int cu[N],xu[N];//原数据 及排序后的数据10 void build(.. 阅读全文
posted @ 2013-09-13 19:13 _雨 阅读(288) 评论(0) 推荐(0)
摘要:链接dfs倒着搜 返回的路径不能满足相同的数最多 借鉴了下别人的代码。。先dp出来 再倒着标记一下 然后正回来一定可以满足了dp保存的是最小的不相同数 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define INF 0xfffffff 8 int dp[1010][10010]; 9 char s[1010]; 10 int flag,path[1010],k,m,pp[1010],f[1010][10100]; 11 int main() 12 { 13... 阅读全文
posted @ 2013-09-11 09:21 _雨 阅读(177) 评论(0) 推荐(0)
摘要:链接dfs了 写得有点乱 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define INF 0xfffffff 8 struct node 9 { 10 int lx,ly,rx,ry,d; 11 }co[22]; 12 int kk[22][22],o[22]; 13 int num[22][22],oo[22],ans,fk[22]; 14 int n; 15 void dfs(int u,int de,int vis[]) 16 { 17 ... 阅读全文
posted @ 2013-09-03 18:17 _雨 阅读(219) 评论(0) 推荐(0)
摘要:链接本来想写spfa 加点什么限制什么的可能就过了 写着写着就成裸BFS了 也没优化就水过了 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 110 9 #define M 1001010 #define INF 0xfffffff11 struct node12 {13 int u,v,w,next,len;14 }ed[Mq;38 mode ss,st;39 int i;40 for(i = 2; i a... 阅读全文
posted @ 2013-09-03 13:15 _雨 阅读(213) 评论(0) 推荐(0)
摘要:链接想偷点懒用矩阵存 一直WA 后来看讨论说有重边改为邻接表 这题边可能走了不止一次 我设的最多两次可过 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define INF 0xfffffff 8 struct node 9 {10 int u,v,w1,w2,d,next;11 }ed[22];12 int head[12];13 int n,m,p[12][12],ans;14 int vis[12],t;15 void init()16 {17 t = 0... 阅读全文
posted @ 2013-09-03 09:35 _雨 阅读(181) 评论(0) 推荐(0)
摘要:链接这题其实是由bug的 一个串包含其它两个串的数据没有 所以就这么水了它吧 只处理两个串的关系就行了回来补点。。看了huge的博客 发现其实不是有Bug 题意没读清楚 必须首尾相连 像AGCT GC这样就不算。。降低了复杂 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define INF 0x3f3f3f 8 char s[22][22]; 9 int k[22],o[22][22],n;10 int vis[22],ans;11 void init()12 {13 ... 阅读全文
posted @ 2013-09-02 09:45 _雨 阅读(383) 评论(0) 推荐(0)
摘要:链接dp好想 根据它定义的 记忆化下就行路径再dfs一遍 刚开始以为要判空格 所以加了判空格的代码 后来知道不用 。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define INF 0xffffff 8 int dp[110][110]; 9 char s[110],q[550]; 10 int dfs(int a,int b) 11 { 12 int i,d1,d2 = INF; 13 if(dp[a][b]!=-1) 14 r... 阅读全文
posted @ 2013-08-31 21:27 _雨 阅读(185) 评论(0) 推荐(0)
摘要:链接把迭代加深理解错了 自己写了半天也没写对所谓迭代加深,就是在深度无上限的情况下,先预估一个深度(尽量小)进行搜索,如果没有找到解,再逐步放大深度搜索。这种方法虽然会导致重复的遍历 某些结点,但是由于搜索的复杂度是呈指数级别增加的,所以对于下一层搜索,前面的工作可以忽略不计,因而不会导致时间上的亏空。IDA*就是一个加了层数限制depth的DFS,超过了限制就不在搜索下去,如果在当前层数没有搜到目标状态,就加大层数限制depth,这里还只是一个IDA算法,并不是A*的。当然我们可以用A*的估计函数去剪枝,如果当前深度d+h()>depth的时候就可以不再搜索下去了,这样就是IDA*了。 阅读全文
posted @ 2013-08-27 22:09 _雨 阅读(654) 评论(0) 推荐(0)
摘要:链接想O(n*n)的DP 怎么想都超内存 看讨论有说hash+DP过的 实现比较繁琐大部分直接暴力过了直接枚举每个i j 与他们在一条线上的点 是不是给出的点注意它必须能跳进和跳出 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 5010 8 bool flag[N][N]; 9 struct node10 {11 int x,y;12 }p[N];13 bool cmp(node a,node b)14 {15 if(a.x==b.x)16 ... 阅读全文
posted @ 2013-08-26 10:54 _雨 阅读(222) 评论(0) 推荐(0)
摘要:链接类似最大矩阵 sum存下 枚举最大就是 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int sum[110][110],o[110][110]; 8 int main() 9 {10 int i,j,n,w,h,a,b;11 while(scanf("%d",&n)&&n)12 {13 scanf("%d%d",&h,&w);14 memset(o,0,sizeof(o));15 memset(s 阅读全文
posted @ 2013-08-25 14:34 _雨 阅读(169) 评论(0) 推荐(0)
摘要:链接真的1A了。。一开始想复杂了 想着补全再删 没想好 后来想到递归 大的回文串是由小的推过来的一直递归下去 对于当前的i,j可以选择保留或者删除 选个最小的 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 2010 8 #define INF 0xfffffff 9 int v[500][2];10 int dp[N][N];11 char s[N];12 int dfs(int i,int j)13 {14 if(i>j) return 0;15 ... 阅读全文
posted @ 2013-08-25 13:47 _雨 阅读(241) 评论(0) 推荐(0)