1*a+2*b+3*c+4*d+5*e=5*sum[5]-(sum[1]+sum[2]+sum[3]+sum[4])。
现在题目求连续三个数*1*2*3的最大和。接着看:
当i=3:
3*sum[3]=3*(a+b+c)
1*a+2*b+3*c=3*sum[3]-(2*a+b)=3*sum[3]-(a+b+a)=3*sum[3]-(sum[2]+sum[1])=3*sum[3]-(s[2]);
i=4:
3*sum[4]=3(a+b+c+d)
b+2*c+3*d=3*sum[4]-(3*a+2*b+...
分类:
其他好文 时间:
2015-07-27 15:01:17
阅读次数:
111
1.设计包含min函数的栈[数据结构]题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。2.子数组的最大和[算法]题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个...
分类:
编程语言 时间:
2015-07-26 22:22:45
阅读次数:
212
题意:给定一个长度为N的数组,求两个连续的子序列,使得两个连续子序列的和最大。
分析:乍一看,跟最大连续和有点类似,但是,又有区别,因为对于这个题,考虑第i项两个连续子序列的最大和,不能仅仅由前i-1项递推得出,第i项两个连续子序列的最大和,与前i项和i以后的之间是存在关系的,因此这个题目是一个双向dp。
假如给定的序列为a0, a1, a2, a3, a4, ...... ,an,那么,对于...
分类:
其他好文 时间:
2015-07-26 11:15:59
阅读次数:
144
方格取数问题,给出n*n矩阵,3
求能取得的最大和,要求取某个位置的数以后,其周围的8个数字均不能再取
先预处理出来所有的可取状态,n=15时只有1597个状态,然后地推求解即可
#include "stdio.h"
#include "string.h"
int n,ans;
int b[21],a[21][21],s[1700];
int dp[21][70001],sum[21...
分类:
其他好文 时间:
2015-07-25 18:32:51
阅读次数:
124
1、动态规划的思想
动态规划即把全局问题的解分解为一个个子问题的解,一个个子问题的解存在递推关系,即上一个问题的解是下一个问题解的基础,这样直到求解出全局问题的解。
2、求一个数组中连续几个数相加的最大值;
给定一个数组,它里面全是一些数字,要找出任何连续的值中最大的和. 例: 已有数组:{31,-41,59,26,-53,58,97,-93,-23,84}
它的连续的...
分类:
编程语言 时间:
2015-07-22 22:44:09
阅读次数:
132
T1:pog loves szh I(hdu 5264)题目大意:给出把AB两个字符串交叉拼起来的结果,求出原串。题解:不解释。。直接每次+2输出。T2:pog loves szh II(hdu 5265)题目大意:给出N个数,求Mod P域下两个数最大和。 N<=100000题解:先把所有数Mod...
分类:
其他好文 时间:
2015-07-20 09:10:14
阅读次数:
106
题意:求上升序列的最大和。
思路:简单DP。两重循环:dp[i]表示以v[i]结尾的最大和,状态转移方程dp[i]=max(dp[j]+v[i],dp[i]) (在v[j]
AC代码:
#include
#include
#include
#include
using namespace std;
int main()
{
int n,dp[1005],v[1005];
whil...
分类:
其他好文 时间:
2015-07-19 11:53:09
阅读次数:
113
https://leetcode.com/problems/divide-two-integers/需要注意的,int类型的数据,正数最大和负数最小可以表示到:2147483647-2147483648正数最大的二进制码为:011111111......1111,负数最小的二进制码为:1000000...
分类:
其他好文 时间:
2015-07-18 18:31:53
阅读次数:
141
题意:n个数,分成m段,求这m段的最大和,段之间不能交叉。
分析:
这题跟最大子序列和的区别在于要求分成m段,所以做法就千差万别了。实际的做法倒有点像分组dp(将n个数分成m组),但是本题与上次写的两道分组dp(搬寝室和特殊的筷子)的不同是:上两题每组选两or三个元素,本题不确定每一段要选多少个元素;上两题先排序再做,这题只能根据序列原定顺序走。
本题难点:
1.状态:dp[i][j]在确...
分类:
其他好文 时间:
2015-07-18 14:13:24
阅读次数:
219
题意:数字排成三角形,求从顶点加到底,最大的和是多少。每个点只能加跟它直接相连的其中一个
分析:
数塔是经典的dp模型,从底往上推,每次找最大的往上一层加,最后归总到顶点,结果就是顶点的值。
dp[i][j]:加到dp[i][j]第i行第j个数时的最大和;dp[i][j]=dp[i][j]+max(dp[i+1][j],dp[i+1][j+1])
代码:
#include
#define...
分类:
其他好文 时间:
2015-07-17 16:23:51
阅读次数:
110