LeeBlog

导航

2011年4月22日 #

DP 动态规划小结

摘要: 到今天为止,动态规划入门已经有好几天题也做了几个了,其实这部分题大概都是一个规律:要找到整个问题的最优解,先找到局部的最优解,然后将范围逐渐扩大,最后扩大到全局就可以了,例如HDU 1087 super jumping!先从第一个起,先把第一个的最优解找到,然后往后增加,找到第一个到第二个的最优解,并保存在数组2中然后再增加,找到第一个到第三个的最优解,保存在第3个数组中,然后一直往后推移,一直找到全部的最优解。这其中就存在一个问题,为什么要从前面一个一个找呢?为什么不一次找完呢?那样多省时间?我想说:会用我不用啊!傻啊!你!。有狠不把前面n-1个的最优解找出来,直接找到第一个到第n个的最优解 阅读全文

posted @ 2011-04-22 23:22 LeeBlog 阅读(170) 评论(0) 推荐(0) 编辑

HDU 1003 Max Sum

摘要: 本题跟最大子序列差不多,是姊妹题,其实解决了上个,这个只要解决几个地方就可以了,请注意如果有全部是负数,就把这些负数中最大的输出来。#include<stdio.h>#include<string.h>int t,n,pos,num[110000],add[110024],pri[110024];void cal( ){ int pos = 1; for( int i = 1; i <= n; ++i ) { if( add[i-1] >= 0 && (add[i-1] + num[i] >= 0) )//here { add[i] = 阅读全文

posted @ 2011-04-22 20:38 LeeBlog 阅读(162) 评论(0) 推荐(0) 编辑

HDU 1231 最大连续子序列

摘要: 这题是一郁闷题,开始我想了好久没思路,最后想到前面不是做了几个类似的DP么,只要把前一个的最大子序列找到了,那当前这一个的最大子序列就好办了,因此又是一个从前往后解决的问题,不过要注意最后一组测试数据,我在这里错了好几次#include<stdio.h>#include<string.h>int k,num[10024],add[10024],pri[10024],pos;void cal( ){ int m = 0; for( int i = 1; i <= k; ++i ) { if( (add[i-1] + num[i]) > 0 && 阅读全文

posted @ 2011-04-22 17:12 LeeBlog 阅读(619) 评论(0) 推荐(0) 编辑