
ACM
文章平均质量分 57
Niteip
这个作者很懒,什么都没留下…
展开
-
杭电1081 To The Max
最大子矩阵最大子段和(LIS)的升级思路:for(i=0;i<n;i++){ for(j=i;j 0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2i , j 表示行数。如:i=2 j=3 也就是2、3行,我们可以把2、3行的数加在一起,成了一个新行(-4+-1) (1+8) (-4+0) (1+-2)然后对这原创 2012-04-10 13:50:22 · 1292 阅读 · 0 评论 -
No.2:完全背包问题
题目有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这个问题十分类似01背包,不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。于是得: f[i]原创 2014-02-12 20:54:15 · 1492 阅读 · 0 评论 -
No.3:多重背包问题
题目有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i]件。令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值,则有状态转移方程:f[i][v]=max{原创 2014-02-21 14:56:23 · 1180 阅读 · 1 评论 -
String类成员函数的实现
class String{public: String(const char *str = NULL); // 通用构造函数 String(const String &another); // 拷贝构造函数 ~ String(); // 析构函数 String & operater =(const String &rhs); // 赋值函数private:原创 2013-10-11 15:45:05 · 2290 阅读 · 0 评论 -
一步一步写平衡二叉树(AVL树)
转载:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来转载 2013-09-20 08:43:29 · 66582 阅读 · 23 评论 -
快速排序
快速排序思想,在数组中找一个X,把比它小的全部放到左边,比它大的放到右边,再分别对左边和右边进行相同的操作,当递归结束时,那么数组一定有序。算法的优势是:将一个大问题分解为两个小问题,简化问题难度。在基于比较的排序中,时间复杂度的下界是O(nlogn)。证明如下:在没有比较的时候,排序的结果有n!种情况。第一次比较,由于有两种结果,所以最坏的情况下最终结果还有n!/2种可能原创 2013-09-12 19:45:27 · 785 阅读 · 0 评论 -
KMP算法
懒,随便写点敷衍下吧。KMP中的灵魂,next[]数组。next[i]记录的是一个部分匹配,模式串t,假设是tomatoabc后缀toabc中正好有开头的“to”,开与主串s匹配时,假设到toabc的b失败了,(可以认为s是。。。tomatoacb。。。),我们不必返回,直接在tomatoacb这里继续匹配。next[i]记录的,正是当前字符之前,与开头匹配的串的长度。规定,n原创 2013-09-13 12:09:22 · 935 阅读 · 0 评论 -
3字符串求最长公共自序列
如果会LCS这才看这题。 画一个三维的立体图。把x轴放s1把y轴放s1把z轴放s3 在o_x_y上匹配s1 s2在o_x_z上匹配 s1 s3在O_y_z上匹配s2 s3对于一个点(x,y,z)(x,y,z)这个点相同的话 在(x-1,y-1,z-1)的基础上加1..等等的DP,具体转移方程f[1][1] = same(1,1) f[i][j]原创 2012-05-24 10:24:04 · 1000 阅读 · 0 评论 -
A*搜索算法(代码为原创)
转载说明:转自http://blog.youkuaiyun.com/walkinginthewind/article/details/6996963 A*搜寻算法,俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC(Non-Player-ControlledCharacter)的移动计算,或线上游戏的BOT(ROBOT)的移动计算上。该算法像Dijkst转载 2012-04-28 12:44:24 · 14731 阅读 · 7 评论 -
杭电1180 诡异的楼梯
这道题,从WA,改到TLE,改到400ms,终于,改到了0ms,收货很多。 一个重点就是:规范 BFS 写法!可以很有效地避免一些状态判重和状态转移上的细节错误,优先队列的使用也很好,以前我都只用队列的,这里不用优先队列会错。 #include#include#include#includeusing namespace std;struct M原创 2012-04-11 11:53:24 · 2244 阅读 · 0 评论 -
最大子段和详解
最大子段和问题(Maximum Interval Sum)(有时也称LIS)经典的动态规划问题,几乎所有的算法教材都会提到.本文将分析最大子段和问题的几种不同效率的解法,以及最大子段和问题的扩展和运用.一.问题描述给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.例如(-2,11,-4,13,原创 2012-04-10 13:39:16 · 24550 阅读 · 2 评论 -
杭电1087 Super Jumping! Jumping! Jumping!
简单的DP题,就是LIS变形而来的LIS和,注意并不要求数之间要相邻 LIS解析详见:http://blog.youkuaiyun.com/niteip/article/details/7444973 #include#includeint a[1005],DP[1005];int max(int a,int b){ return a>b?a:b;}int原创 2012-04-10 13:07:03 · 1148 阅读 · 0 评论 -
No.1:01背包问题
题目:有N件物品和一个容量为V的背包。第i件物品的体积是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}原创 2014-02-11 20:00:11 · 1907 阅读 · 0 评论