51nod 1270 dp】的更多相关文章

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1270 简单的线性dp,最近狂刷水题真的是...药丸 差值最大得话要么是峰顶要么是最小的1,不可能处在中间状态,那样显然没有峰值的贡献大,想通这一点之后方程就好写了, dp[i][0]表示第i个数取最小值的最大代价,dp[i][1]相反. 有 dp[i][0]=max(dp[i-1][0],dp[i-1][1]+a[i-1]-1); dp[i][1]=max(dp[i-1…
1270 数组的最大代价题目来源: HackerRank基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 数组A包含N个元素A1, A2......AN.数组B包含N个元素B1, B2......BN.并且数组A中的每一个元素Ai,都满足1 <= Ai <= Bi.数组A的代价定义如下:     (公式表示所有两个相邻元素的差的绝对值之和) 给出数组B,计算可能的最大代价S. Input 第1行:1个数N,表示数组的长度(1 <= N <= 500…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1154 1154 回文串划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式.   a|bb|aabaa - 3 个回文串 a|bb|a|aba|a - 5 个回文串 a|b|b|a|a|b|a|a - 8 个回文串   其中第1种划…
这题是看起来很复杂,但是换个思路就简单了的题目. 首先每个点要么取b[i],要么取1,因为取中间值毫无意义,不能增加最大代价S. 用一个二维数组做动态规划就很简单了. dp[i][0]表示第i个点取1时(第0-i个点)得到的最大代价之和. dp[i][1]表示第i个点取b[i]时(第0-i个点)得到的最大代价之和. 每一个都由前面两个推出. #include <bits\stdc++.h> using namespace std; ]; ][]; // dp[][0]表示取1,dp[][1]表…
w[i,j]代表高度j,第i颗树的时候的最大值 那么w[i,j]:=max(w[i,j+1],w[k,j+heigh])+sum[i,j]: 但是这样枚举是n^3的,我们发现转移的第二个选择w[k,j+heigh]与当前 第I颗树没有关系,所以记录一个高度为H的时候时的最大值直接O(1)转移就行了 我也不知道咋回事儿,pascal一直RE,一年前能A的代码现在还是RE,然后向管理员 联系了下,他们说数据没有问题,还把数据发过来了,一共5个点,最后一个点的in竟然 30MB...,挂接都挂不了..…
数组的最大代价(51nod 1270) Description 数组A包含N个元素A1, A2......AN.数组B包含N个元素B1, B2......BN.并且数组A中的每一个元素Ai,都满足1 <= Ai <= Bi.数组A的代价定义如下: \[S=\sum_{i=2}^{N}|A_i-A_{i-1}|\] (公式表示所有两个相邻元素的差的绝对值之和) 给出数组B,计算可能的最大代价S. Input Format 第1行:1个数N,表示数组的长度(1 <= N <= 5000…
51nod 1134 最长递增子序列 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define rep(i,l,r) for (int i=l; i<=r; i++) typedef long long ll; using namespace std; ; int n, s[N]; int dp[N]; int main(){ freopen(&q…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1270&judgeId=194704 一开始贪心,以为就两种情况,大.小.大.小.....这样下去 小.大.小.大.....这样下去, 结果翻车.比如1.2.1.1.2.1这个样例 就不行了. 那么以dp[i][0]表示前i个数,第i个数选了小的数字,能产生的最大差值, dp[i][1]同理,转移的时候,上一唯也是两种情况,所以一共4中情况. #include <cs…
题目链接:51nod 1412 AVL树的种类 开始做的时候把深度开得过小了结果一直WA,是我天真了.. #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; typedef long long ll; ; ; ll dp[N][];//dp[i][k] i:节点数, k:深度 void solve(){ int i, j, k;…
题目链接:51nod 1183 编辑距离 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; char a[N], b[N]; int dp[N][N];//dp[i][j]:a串的前i个字符转化成b串的前j个字符的最少操作数 int main(){ int i, j; scanf(, b+); ); ); ; i <= alen; ++i) dp[i][] =…