算法入门竞赛经典
zytjyh
努力,也是一种天赋
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UVA(1606)
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map> #include<set>#原创 2016-09-17 02:04:04 · 458 阅读 · 0 评论 -
Uva10934 详解 装满水的气球(Dropping water balloons)
因为给定气球数后,不同的尝试次数,值是固定的,所以先求出所有解节省时间。dp(i,j)=dp(i-1,j-1)+1+dp(i,j-1)可以理解为:假设当前在k层,他1.如果该层气球爆炸,则这一层需要消耗一个气球,和一次尝试,所以前面k-1层消耗了i-1个气球和j-1次尝试。2.如果该层气球不爆炸,则这一层不需要消耗气球,但是需要消耗一次尝试,所以j需要减1。#pra原创 2017-02-18 21:56:19 · 1755 阅读 · 0 评论 -
《算法竞赛入门经典》7.4回溯法
分支因子b 和 层数L,则最终的解答树节点总量为 (b^L-1)/(b-1)八皇后技巧 主对角线在一条线上 cur-C[cur]==j-C[j],副对角线cur+C[cur]==j+C[j]也可用个vis[][]来存储三种违规情况的出现,但结束这次访问时一定要改回去,这不同于求子集,这个是要你统计总共有多少条不同的方法,即使后面他门前面有相同的部分也是两种不同的方法。因为顺序不同Uva524素数环水原创 2017-02-05 12:16:52 · 655 阅读 · 0 评论 -
《算法竞赛入门经典》第七章7.1,7.2,7.3(总结)
7.1 一般如果让你求a,b满足h(a,b)=k,k为一个固定的函数,可以通过枚举a,然后用k反向求b,来减少一层循环,两个以上情况同理。 1.技巧总结如果求abcdefgh判断他们是否互补相等,可以从0~n分别对应,然后通过从0~n一 一对i==a[i]来判断是否每一个都存在,来得出结果。 2.尽量把除法表示的关系转换成乘法,避免int截位7.2生成有重复和无重复的排列都可以用c++库中的n原创 2017-02-05 00:07:29 · 726 阅读 · 0 评论 -
《算法竞赛入门经典》第六章6.1,6.2总结
UVa210UVa514这道题有两种方法,我用的方法耗时一些,想法来自于数字结构的考研书,即一个存在的出栈序列,如果一个数后面有比他小的书,这些数一定是按照从大到小的顺序排列,然后我就检查序列中每一个是不是都满足这个条件来判断。刘汝嘉的想法很巧妙,每次出去的时候只有两种可能要么来自进栈序列的开头数字或者栈顶的数字,所以根据这个来判断下就好了。UVa442这个没有什么算法思想就是普通的括号匹配问题技原创 2016-11-25 12:36:24 · 622 阅读 · 0 评论 -
刘汝佳 BigInteger 大数模板
struct BigInteger{ static const int BASE = 100000000; static const int WIDTH = 8; vector<int> s; BigInteger(long long num = 0) { *this = num; } BigInteger operator=原创 2016-11-25 20:05:17 · 2837 阅读 · 0 评论 -
《算法竞赛入门经典》第六章6.3树和二叉树总结
UVa679这道题刚开始我的想法就是和书上那个超时的代码,一样的,通过一个树状数组去模拟那个过程和书上分析的那样,测试数据太过庞大,虽然没有数组移动这样耗时的程序,但for(int i=0;i<I;i++)中的for最多可以有524288,而且还有一万组,肯定会超时。所以现在重点是如何减小对I的判断量,模拟一个过程后,我们很容易发现到底某个点的球数Number,如果是奇数,则最后一个往左边走,且左边原创 2016-11-24 19:10:15 · 1006 阅读 · 0 评论 -
《算法竞赛入门经典》第四章总结
例题 4-1两串字符串都只要,统计不同字符的出现次数,然后排个序,如果从小到大都相等则输出YES,否则输出NO。4-2好坑= =如果单词已经全部猜完直接跳出,我还以为如果此时如果猜的还有= =任要继续呢4-3这题很妙的是用-1,1两种步长来表示两种方向,刚开始我还再想如果到了负数%怎么用,白书更妙的是每次从n-1开始这样增张减少都可以都可以 1. 列表内容4-4这题最终要的就是练习了多行输入=原创 2016-11-01 01:29:44 · 817 阅读 · 0 评论 -
10000以内素数表
2 3 5 7 11 13 17 19 23 2931 37 41 43 47 53 59 61 67 7173 79 83 89 97 101 103 107 109 113127 131 137 139 149 151 157 163 167 173179 181 191 193 197 199 211 223 227 229233 239 241 251 257 263 269 27原创 2016-10-07 13:51:57 · 17310 阅读 · 0 评论 -
ACM程序测试
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map> #include<set>#原创 2016-09-24 23:27:47 · 966 阅读 · 0 评论 -
UVa401
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map> #include<set>#原创 2016-10-05 23:14:00 · 454 阅读 · 0 评论 -
《算法竞赛入门经典》(竖式问题)
可以用sprinf将一串字符存在一个数组中,然后用strchr判断是否都满足条件。#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#inclu原创 2016-10-04 22:24:13 · 1116 阅读 · 0 评论 -
《算法竞赛入门经典》第三章(蛇形填数)
自己的#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map> #include<set原创 2016-10-04 21:44:55 · 615 阅读 · 0 评论 -
分治思想《算法竞赛入门经典》
三步法 1,划分问题 2,递归求解 3,合并问题首相分治法可以用了优化最大连续和 优化后时间复杂度为o(nlogn)第一步:利用m=x+(y-x)/2,设置划分点。注意划分格式为[x,m),[m,y),这样不仅符合左边去到右边取不到的规范,而且不用m-1,m+1这些容易出错的步骤。 第二步:划分后近似相当于T(n)=2(n/2),然后对两边递归求解,最小不可分元素就是当一段连续和中只有一个原创 2016-09-08 20:03:32 · 490 阅读 · 0 评论 -
文章标题
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map>using namespace原创 2016-09-07 23:42:03 · 290 阅读 · 0 评论 -
《算法入门竞赛经典》(第八章)8.1
最大连续和 三种方法: 1,暴力枚举(三重for循环)n^3; 2,记录从开始到每个点的总和,通过两个点的总和相减来求各段区间的长度n^2 3,利用分治的思想,求左边L的最大值和右边R的最大值,L+R就为最大连续和nlogn1,第一种#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string原创 2016-09-07 16:36:48 · 512 阅读 · 0 评论 -
《算法竞赛入门经典》算法设计与优化策略(总结)
例题8-1 很好奇 = =后台程序的判定方法,这里只要最终给出按规则的反转最后得到有序序列就可以了,刚开始我是直接先判断最后一个数与排好序的数最后一个数是否相等,是就往前移一位,知道有不同的出现,然后将不同的翻到第一个位置,然后再从前往后找它该插的位置,最后i还要++因为是用for()循环从后往前的,原来数走后新的数还没有判断。这样原本排好序的数字,后面任然有被翻动的可能,要一直翻到现在的i与排原创 2016-09-19 00:04:07 · 701 阅读 · 0 评论 -
Uva1252 详解 20个问题 Twenty Questions
嗯原创 2017-02-20 23:19:01 · 902 阅读 · 0 评论
分享