可以发现 当第i-1个比第i个高的时候 比第i-1个高的所有也一定比第i个高
于是可以用到动态规划的思想
令left[i]表示包括i在内比i高的连续序列中最左边一个的编号 right[i]为最右边一个的编号
那么有 当h[left[i]-1]>=h[i]]时 left[i]=left[left[i]-1] 从前往后可以递推出left[i]
同理 当h[right[i]+1]>=h[i]]时 right[i]=right[right[i]+1] 从后往前可递推...
分类:
其他好文 时间:
2014-08-05 09:39:49
阅读次数:
276
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=4908
题目大意:给出一个排列,一个m,求出这个排列的连续子序列中有多少个序列式以m为中位数。
由于是一个排列,不会出现重复的数字,记录一下m的位置index,然后以index为分界线,往左求出s[i](表示从i到index之间有多少大于m),b[i](表示从i到index之间有多少小于m),往右...
分类:
其他好文 时间:
2014-08-04 11:13:37
阅读次数:
258
状态压缩 动态规划DP[111.....1]=1表示所有鱼都在的几率为10代表已经挂了的,1代表没挂;#include "stdio.h"#define max 10;i--){ int bit=bitcount(i); if(bit==1)continue; double p=2*dp[i]...
分类:
其他好文 时间:
2014-07-27 23:19:49
阅读次数:
316
分析:本题为区间型动态规划,dp[i][j]表示从第 i堆合并到第j堆的最小代价,sum[i][i]表示第i堆到第j堆的石子总和,则动态转移方程:dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + sum[i][j]) (i 2 #include ....
分类:
其他好文 时间:
2014-07-25 13:54:41
阅读次数:
190
/***** HDOJ_2084_数塔问题 ********//******** written by C_Shit_Hu ************/ ////////////////动态规划DP问题/////////////// /*******************************.....
分类:
其他好文 时间:
2014-07-22 00:10:33
阅读次数:
159
在第三节中,我们将讨论序列化问题中的动态规划解法。这部分多半分为单序列和双序列等问题
例一:最长上升子序列。
最长上升子序列问题,有一个正整数数列,长度n在1000之内,元素a[i]在10^5之内,求最长递增子序列的长度。
分析一:发现问题的可分性质
如果我们采用穷举法,将有2^n的时间复杂度;这里面有很多是重复的4、3、***类型的子序列,以4开头的递增子序列的长度都是1....
分类:
其他好文 时间:
2014-07-21 15:34:06
阅读次数:
207
上一节,我们讨论了01背包问题,说明了*递归与分治法 与 动态规划DP的区别和联系,介绍了缓存的概念*。以下,我们用DC、DP、cache分别表示分治法、动态规划和缓存。本节,我们讨论01背包的另外两种形似——
完全背包和多重背包问题,分析DP问题的另外一些情况。
例一:完全背包问题
同样有n种价值和重量分别为weight[i] and value[i], 背包大小W。限制条...
分类:
其他好文 时间:
2014-07-21 15:18:15
阅读次数:
295