
算法讲解
K_rew
You think it,and you can make it.
展开
-
前缀和问题
一维前缀和这个优化主要是用来在O(1)时间内求出一个序列a中,a[i]+a[i+1]+……+a[j]的和。具体原理十分简单:用sum[i]表示(a[1]+a[2]+……+a[i]),其中sum[0]=0,则(a[i]+a[i+1]+……+a[j])即等于sum[j]-sum[i-1]。二维前缀和同理,有一维就有二维。对于一个矩阵a,我们也能在O(1)时间内求出子矩阵[x1~x2][y1~y2]的和。原创 2016-01-16 11:18:53 · 14468 阅读 · 1 评论 -
分治:区间和问题
问题:现有一个含n个整数(可含负数)的序列,求x,y使a[x]+a[x+1]+……+a[y]最大.算法:第一级:枚举首先想到的就是暴力枚举:从大到小枚举x,y,计算从a[x]加到a[y]的和,与当前答案比较。代码如下:#include <cstdio>const int maxn=1000;int main() { int n,ans,a[maxn]; scanf("%d",&n); fo原创 2015-12-16 00:02:04 · 626 阅读 · 0 评论 -
动态规划:01背包问题的浅谈
经典01背包问题:(1)定义:你有n种物品,每种只有一个,每个物品有一个价值c和重量w。有一个背包,最多能装总重量为w的物品,求能装进背包物品的最价值最大值。(2)解析:首先不妨想另外一个问题:如果把物品换成“沙子”一类的东西,即可以取任意实数范围内的个数呢?不难想到一定要取“单位价值”最大的东西,即c/w最大,因为最后总能填满背包。然而对于整数个范围的个数,这样的贪心方法是否适用呢?很遗憾,答案是原创 2015-12-19 12:08:13 · 814 阅读 · 0 评论