博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3401
阅读量:4677 次
发布时间:2019-06-09

本文共 1445 字,大约阅读时间需要 4 分钟。

最近遇到不少DP优化的题,感觉这方面还有些欠缺,现在就多做点这方面的题,练练手。

这题是道较为经典的单调队列优化的题,总共有三种状态,买,卖及其他。

对于买:dp[i][j] = max(dp[i][j],dp[x][y] - (j-y)*sell) (y<=j && y+买的限制>=j &&  0 <= x <= i-w-1)

对于卖:dp[i][j] = max(dp[i][j],dp[x][y] + (y-j)*buy) (y >= j && j + 卖的限制 >= y && 0 <= x <= i-w-1)。

优化主要在T,和MAXP上。

View Code
1 #include
2 #include
3 #include
4 #include
5 #include
6 #define MAXN 2012 7 #define INF -(1<<29) 8 using namespace std; 9 int dp[MAXN][MAXN];10 int b_price[MAXN];11 int s_price[MAXN];12 int b_stock[MAXN];13 int s_stock[MAXN];14 15 void get_dp(int n, int w, int p)16 {17 int ans = INF;18 dp[0][0] = 0;19 int b[MAXN];20 int s[MAXN];21 for (int i(0); i
w) {27 while (b_h != b_e && b[b_h+1] + b_stock[i] < j) ++b_h;28 while (s_h != s_e && s[s_h+1] < j) ++s_h;29 30 while (b_h != b_e && dp[i-w-1][b[b_e]] - b_price[i]*(j-b[b_e]) < dp[i-w-1][j])--b_e;31 b[++b_e] = j;32 dp[i][j] = max(dp[i][j],dp[i-w-1][b[b_h+1]]-b_price[i]*(j-b[b_h+1]));33 while (j + s_stock[i] >= k && k <= p) {34 while (s_h != s_e && dp[i-w-1][s[s_e]] + s_price[i]*(s[s_e]-j) < dp[i-w-1][k] + s_price[i]*(k-j))--s_e;35 s[++s_e] = k;36 ++k;37 }38 dp[i][j] = max(dp[i][j],dp[i-w-1][s[s_h+1]]+s_price[i]*(s[s_h+1]-j));39 }40 ans = max(ans,dp[i][j]);41 }42 }43 cout<
<

转载于:https://www.cnblogs.com/devtang/archive/2012/08/27/2658791.html

你可能感兴趣的文章
SPOOL、SQLLOADER数据导出导入的一点小总结
查看>>
js代码移动Div 移动平台与PC平台
查看>>
java学习——网络编程UDP
查看>>
leetcode 136 Single Number, 260 Single Number III
查看>>
WPF——RenderTransform特效
查看>>
使用框架的——好处
查看>>
如此大量的代码,但每个类里面的代码却不显得特别多,原因。。。。。。。。。。。。...
查看>>
C#特征备忘
查看>>
intelil——快捷键
查看>>
Java 面向对象 之 final 关键字
查看>>
Contact Form 7邮件发送失败的解决办法
查看>>
How to use For loop in CruiseControl.net
查看>>
P1800 software_NOI导刊2010提高(06)
查看>>
Python学习日记(1)使用if __name__ == "main"
查看>>
第八章 线性时间排序 8.3 基数排序
查看>>
创建maven项目
查看>>
二进制的最大公约数
查看>>
彻底弄懂 RTL级,行为级的区别
查看>>
关于PHP开发的9条建议
查看>>
jackson的自动检测机制
查看>>