acm
文章平均质量分 50
mnlghttr
这个作者很懒,什么都没留下…
展开
-
动态规划和递归、循环、迭代
动态规划和递归是两种不同的方法,不可混为一谈。 递归算法是解决递归问题的算法。若问题与其子问题是同一概念,该问题是递归问题。 动态规划算法是空间换时间的算法。 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。 为了节约重复求相同子问题的时间,引入一个数原创 2013-12-03 18:28:49 · 2501 阅读 · 0 评论 -
最长公共子序列-动态规划
http://acm.nyist.net/JudgeOnline/problem.php?pid=17 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。 为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,原创 2013-12-04 17:26:08 · 747 阅读 · 2 评论 -
多边形重心问题-计算几何
http://acm.nyist.net/JudgeOnline/problem.php?pid=3 重心和面积以及坐标的关系 三角形的重心坐标是顶点坐标的平均值。 多边形可以分成若干个三角形,将这些三角形看做质点(质点的位置是三角形的重心,质量是面积),那么多边形就由这些质点组成,质点坐标以其质量为权的加权算术平均数即是多边形重心坐标。原创 2013-12-01 17:04:15 · 9023 阅读 · 0 评论 -
布线问题-最小生成树
http://acm.nyist.net/JudgeOnline/problem.php?pid=38 邻接矩阵+普利姆算法 #include #include using namespace std; #define M 10000 int main(void){ //普利姆算法 int n; cin>>n; while(n--){ int v,e,原创 2013-12-01 16:47:13 · 717 阅读 · 0 评论 -
skiing-记忆化深搜
题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=10 这道题就是找出一条最长连续递减序列,并求出其长度。可以用记忆化深搜,求出每一点最长序列的长度,然后求最大值即可。 代码如下: #include #include using namespace std; const int N=105; int a转载 2013-09-21 11:10:45 · 763 阅读 · 0 评论 -
开心的小明-01背包
nyoj第49题http://acm.nyist.net/JudgeOnline/problem.php?pid=49 动态规划,递推关系式(动态转移方程)为v*p+a[j-v]>a[j]?a[j]=v*p+a[j-v]:0; #include #include #include using namespace std; int main(){ int k; cin>>k; whi原创 2013-09-22 11:30:11 · 548 阅读 · 0 评论 -
拦截导弹-最长逆序长度-动态规划
nyoj第79题http://acm.nyist.net/JudgeOnline/problem.php?pid=79 来源 2007年北京大学计算机研究生机试真题 【思路】 换个说法就是,求最长逆序的长度。f[i]是必须以a[i]结尾的最长逆序的长度。 #include #include using namespace std; int mai原创 2013-09-23 12:04:02 · 762 阅读 · 0 评论 -
擅长排列的小明-递归
nyoj第19题http://acm.nyist.net/JudgeOnline/problem.php?pid=19 在1-n中选取m个字符进行全排列,按字典序全部输出。 可以用递归的思想,也可以用深搜的思想,但是代码是一样的。往深处递归时通过全局变量a和vis传递信息,而在返回时,要消除信息。 #include #include #include using namespace st原创 2013-09-22 10:19:35 · 576 阅读 · 0 评论 -
BFS——NYOJ 21 三个水杯
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。 输入第一行一个整数N(0 接下来每组测试数据有两行,第一行给出三个整转载 2013-09-19 10:53:43 · 559 阅读 · 0 评论 -
搜索算法的感悟——解空间
练习了将近一个月的搜索算法了,也有了一些小小的感悟。 搜索算法的两个关键问题: (1):如何找到整个解空间。 (2):如何剪枝。 我的感悟是关于解空间的。问题的解往往需要经过一系列操作之后才能得到,而在这一系列的操作中,每一步的操作都会得到一个状态,当最终这个状态与目标状态相同时,此时也就是得到了结果,所以在搜索的过程中,着重需要处理的就是操作和状态。只有考虑了所有可能的操作,才会得到所有转载 2013-09-19 10:49:46 · 1279 阅读 · 0 评论 -
缩点
关于缩点 以前做某些图论题,常听校队的师兄说要“缩点”。但是什么是缩点,缩的是什么点,说的人很清楚,听的人却一头雾水。经过一番努力,本人终于明白了什么是“缩点”,分享一下个人的见解,若有不正确万望指正。 无向图的连通性 先明白一些概念。 割点:若一个点删除后(也就是与之相连的边统统去掉),无向图不再连通,那么此点称为割点。 桥:若一条边断去后,无向图不再连通,那么此边称为桥。桥有转载 2013-09-19 08:51:29 · 3005 阅读 · 0 评论 -
归并排序之求逆序数
nyoj第117题 #include #include using namespace std; //归并排序 const int MAX_n=1000005; int a[MAX_n],buf[MAX_n],n; long long merge(); int main(void){ int t,i; cin>>t; while(t--){ cin>>n; for(i=0;原创 2013-09-05 15:24:16 · 384 阅读 · 0 评论 -
树状数组
nyoj第116题,士兵杀敌(二),利用树状数组#include #include //#include using namespace std; //树状数组 const int MAX_n=1000005; const int MAX_m=100005; int a[MAX_n]; int n; int ta[MAX_n];//tree like array int sum0[MAX_n]原创 2013-09-05 15:22:21 · 372 阅读 · 0 评论 -
传纸条(一)-双线性动态规划
http://acm.nyist.net/JudgeOnline/problem.php?pid=61 方法一: 1、 读入矩阵,注意行列。 2、 采用一个四维数组记录当前两条路走到的位置(i1,j1,i2,j2)时取得的最大值,初始化为0,表示不可能到达。(0,0,0,0)为1,最后减1输出。 3、 一个四重循环枚举两条路分别走到的位置。由于每个点均从上或左继承而来,故内部有四个原创 2013-12-05 16:06:25 · 901 阅读 · 0 评论