摘要: /*树状数组,线段树,合并排序*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include & 阅读全文
posted @ 2011-04-12 23:47 AC2012 阅读(119) 评论(0) 推荐(0) 编辑
摘要: /*树状数组,归并排序*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <a 阅读全文
posted @ 2011-04-12 21:53 AC2012 阅读(146) 评论(0) 推荐(0) 编辑
摘要: /*DP此题的方程是 DP[i][j],i是左下标,j是右下标DP[i][j] 表示从i到j的字符串需要加多少个字符才能使其成为回文串if( in[i]==in[j] ) DP[i][j] = DP[i+1][j-1];else DP[i][j] = MIN(DP[i+1][j],DP[i][j-1])+1;但是此题的内存要求很小,DP[N][N]行不通。从方程中可以看出,i只和i+1有关,所以可以使用滚动数组起初我使用的mod = 3的滚动。按照长度来进行DP的,这样两层的滚动不够,因为除了当前和减一,还有减二的情况所以,需要三层还有一种构造滚动数组的方法是:不使用长度来进行DP,而是使用下 阅读全文
posted @ 2011-04-12 18:38 AC2012 阅读(142) 评论(0) 推荐(0) 编辑
摘要: // include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <algorithm># 阅读全文
posted @ 2011-04-12 16:34 AC2012 阅读(150) 评论(0) 推荐(0) 编辑
摘要: /*起初我实现的DP比较慢,原因是我忽略了一个很重要的事实,那就是所有的砝码都必须用上,这就是说,每一个砝码都会出现的,既然如果,不管放的顺序是什么,都可以看成从第一个开始放,然后第二个,然后第三个。这个发现可以帮助我们消去一个循环现在说下我的最初的DP: DP[i][j][k], 到第i时,差为j,选择k个的个数DP[i+1][j+(i+1号砝码所有可能的放置)][k+1] += DP[i][j][k],很显然这里当k<i的这种情况在以后是用不到的。试想如果出现了DP[i][j][i-1],也就是说少了第i个砝码,以后还会在添加进去吗?不会了,因为砝码就是我的阶段。所以这纯粹是浪费时间 阅读全文
posted @ 2011-04-12 15:58 AC2012 阅读(259) 评论(0) 推荐(0) 编辑
摘要: /*DP好题,再次回顾此题,感慨颇多*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#includ 阅读全文
posted @ 2011-04-12 11:18 AC2012 阅读(230) 评论(0) 推荐(0) 编辑
摘要: /*DP30组数据50000个数,绝对值小于10000最大连续子段和问题*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include < 阅读全文
posted @ 2011-04-12 10:30 AC2012 阅读(195) 评论(0) 推荐(0) 编辑
摘要: /*DP 坐标是对称的原则这个题目出了要深刻理解DP外,还要知道蜘蛛侠游走时候的规律,震荡是对称的。从一个建筑的左边一点到右边一点的纵坐标是相等的。这样的话,蜘蛛侠从起点开始所有的转折点出的纵坐标都和开始的时候一样。DP[i][j],表示对于建筑物i,合法的横坐标j,此时的最小swing次数(因为纵坐标不变,不考虑了);*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#inclu 阅读全文
posted @ 2011-04-12 09:48 AC2012 阅读(155) 评论(0) 推荐(0) 编辑