首先是预处理,用动态规划(DP)解决。 设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值。(DP的状态) 例如: A数列为:3 2 4 5 6 8 1 2 9 7 F[1,0]表示第1个数起,长度为2^0=1的最大值,其实就是3这个数。同理 F[1,1] = m ...
分类:
编程语言 时间:
2017-06-16 19:19:37
阅读次数:
148
今天看了算法导论里面的动态规划(DP),有个有意思的问题:钢条切割来获取最大的收益。 书中讲到了几种求解方法,包括递归求解法、备忘录DP解法、自底向上的解法以及对解的重构。书中给出不同解法的伪码,刚好需要练习c++,就有c++来实现DP求解钢条切割问题。 【递归求解】 【自底向上DP重构解】 自底向 ...
分类:
编程语言 时间:
2017-06-12 00:38:17
阅读次数:
273
洛谷P1077 摆花 DP 划分类动态规划 dp[ i ][ j ] 表示 到 第 i 种花,所有花总共取了 j 盆,总共的方案数 ...
分类:
其他好文 时间:
2017-05-22 13:24:17
阅读次数:
137
1.洛谷 P1049 装箱问题 题目描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数)。 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。 输入输出格式 输入格式: 一个整数,表示箱子容量 一个整数,表示有n个物品 接 ...
分类:
其他好文 时间:
2017-05-09 12:35:24
阅读次数:
196
动态规划是通过找当前项和前一或几项或后一或几项的关系,从而对一个数组多次利用达到减少复杂度。 1.当一串数可以不限次利用时,采用顺序的方式循环:for(j=0;j<=max_n;j++)(一维数组)或者加一个for(k=0;k*A[i]<=j;k++)(二维数组) 2.当一串数的使用次数有限时用fo ...
分类:
编程语言 时间:
2017-04-09 17:08:22
阅读次数:
165
问题描述 给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数。 例如:N=2时 1,2出现了1个 “1” 。 N=12时 1,2,3,4,5,6,7,8,9,10,11,12。出现了5个“1”。 方法一 暴力求解 最直接的方法就是从1开始遍历到N,将其中每一个数中含有“1”的个数加起来, ...
分类:
其他好文 时间:
2017-04-02 12:21:16
阅读次数:
231
【算法】最短路(floyd)&&状态压缩型动态规划(DP) 【题解】dp的顺序应该是由含1的个数少的二进制到1的个数高的二进制(第一重循环) #include<cstdio> #include<algorithm> #include<cstring> using namespace std; con ...
分类:
其他好文 时间:
2017-02-15 22:09:57
阅读次数:
172
动态规划(DP)[1]通过分解成子问题解决了给定复杂的问题,并存储子问题的结果,以避免再次计算相同的结果。我们通过下面这个问题来说明这两个重要属性:重叠子问题和最优子结构。
分类:
其他好文 时间:
2016-10-28 20:51:54
阅读次数:
231
Matt loves letter L.A point set P is (a, b)-L if and only if there exists x, y satisfying:P = {(x, y), (x + 1, y), . . . , (x + a, y), (x, y + 1), . . ...
分类:
其他好文 时间:
2016-10-09 20:24:23
阅读次数:
237
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。 二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为 ...
分类:
其他好文 时间:
2016-08-19 19:08:16
阅读次数:
92