摘要: 先粘上TLE的代码,先对高度离散化,然后DP高度求解。复杂度过高。代码如下:View Code #include <cstdlib>#include <cstdio>#include <cstring>#include <map>#include <iostream>#include <algorithm>#define MAXN 100005using namespace std; int N, cnt;int seq[MAXN], cseq[MAXN];long long dp[MAXN]; map<int,in 阅读全文
posted @ 2012-04-17 21:07 沐阳 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 这次看了这题的动态规划写法,顿时觉得好理解多了。这里要对dp[i]的意义进行一下说明,dp[i]表示从1~i包含第i个数的最大子串和,如果前i-1个数的包含i-1在内的最大和为正数的话,那么包含第i个数的最大子串和就是dp[i-1]+seq[i],否则dp[i] 就等于seq[i]了。该题的动态递归写法并没有直接给出最终答案的状态,但是却能够根据另外的状态推到出答案。这点值得我们思考。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>#def 阅读全文
posted @ 2012-04-17 17:04 沐阳 阅读(422) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1864这一题的题义真的让人很伤神啊。其中不超过600元,是指某一类物品的总和不超过600元,1000元是指整张发票的钱不超过1000元,对于浮点数,我们将其统一乘以100。该题背包的体积就是发票数,对于第 i 张发票,其最大报销额就是 dp[i] = Max[ ( dp[j]+Fee[i] ) <= LIMIT], 其中dp[j]可达(满足在1~i-1张发票之前能够报销j张发票,其总和为不超过额定最大报销额的最大值)。代码如下:#include <cstdlib>#include <c 阅读全文
posted @ 2012-04-17 15:47 沐阳 阅读(277) 评论(0) 推荐(0) 编辑