先排序,再动态规划,需要优化
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1e3+10;
const int maxm = 1e6+10;
int a[maxn];
int f[maxm];
int main()
{
int N, k, i, j, ...
分类:
其他好文 时间:
2014-07-24 11:29:52
阅读次数:
240
http://blog.csdn.net/xiaozhuaixifu/article/details/10818657参考文档链接动态规划的主要三种思维方式:递推(从前往后想),状态转移(从后往前想),记忆化搜索(记录之后直接查寻)。这里使用状态转移的思维解题,明确除了没有移动这种情况,每次接受到或...
分类:
其他好文 时间:
2014-07-24 09:46:02
阅读次数:
185
不同性质的图中,所采取的策略有所不同,自然存在各样的求最短路径的算法。* 无向无权图:BFS* 有向正权图:Dijkstra* 有向无负环图:Bellman-Ford(单点),Floyd-Warshall(任意两点)* 有向无环图(dags): 基于动态规划的算法。## 广度优先搜索(BFS)对于无...
分类:
其他好文 时间:
2014-07-23 20:47:15
阅读次数:
261
此问题可分为两个子问题:当m
所以m
当m>=n时,可分为两种放法,一种为至少有一个盘子为空,则有f[m][n-1]种放法。
另外为n个盘子都不为空,则先将n个苹果一个一个放入n的盘子中,剩下的m-n个苹果再放入n个盘子中。此放法就相当于m-n个苹果放n个盘子里面,有f[m-n][n]种放法。
所以状态转移方程为f[i][j]:if(i>=j)f[i][j]=f[i][j-1]+f[i-j...
分类:
其他好文 时间:
2014-07-23 16:38:01
阅读次数:
202
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你...
分类:
其他好文 时间:
2014-07-23 14:57:26
阅读次数:
208
情形一:不允许首尾相连
此情况很常见,方法是动态规划,编程之美的方法三给出了解法,这里就直接给出代码了
int maxSubSum(vector& data)
{
int length = data.size();
assert(length >= 0);
int maxSum = data[length-1],startSum = data[length-1],begin = leng...
分类:
其他好文 时间:
2014-07-23 13:28:36
阅读次数:
197
题目:poj2342Anniversary party
题意:话说一个公司的一些然要去参加一个party,每个人有一个愉悦值,而如果某个人的直接上司在场的话会非常扫兴,所以避免这样的安排,问给出n个人,每个人的愉悦值以及他们的上司所属关系,问你让那些人去可以让总的愉悦值最大,并求出这个值。
分析:树形dp入门题目,这个公司的人事关系可以根据给出的数据得到一个树,最上面的是最高层...
分类:
其他好文 时间:
2014-07-23 13:03:06
阅读次数:
184
这道题好吧,一开始便是拓扑排序的想法,搞了好久,试了多组测试数据,没错啊,可是没过。。。作孽啊,竟然忘了拓扑不能处理环,白浪费了一晚上。。。只好用动态规划了。。DP【time】【city】表示在time时刻到达city的最迟出发时间,当然,在这个时间不一定到city。转移方程挺简单,不说你也会。 1...
分类:
其他好文 时间:
2014-07-23 12:07:56
阅读次数:
298
HDU1506 Largest Rectangle in a Histogram (动规)
对于每一块木板,Area=height[i]*(j-k+1) 其中,j<=x=height[i];找j,k成为关键,一般方法肯定超时,利用动态规划,如果它左边高度大于等于它本身,那么它左边的左边界一定满足这个性质,再从这个边界的左边迭代下去
for(i=1;i=...
分类:
其他好文 时间:
2014-07-22 17:56:41
阅读次数:
267
情形一:不允许首尾相连
此情况很常见,方法是动态规划,编程之美的方法三给出了解法,这里就直接给出代码了
int maxSubSum(vector& data)
{
int length = data.size();
assert(length >= 0);
int maxSum = data[length-1],startSum = data[length-1],begin = leng...
分类:
其他好文 时间:
2014-07-22 17:54:40
阅读次数:
197