jzoj5259 线性规划问题 (巧妙设状态的dp)
来源:互联网 发布:读书笔记软件下载 编辑:程序博客网 时间:2024/06/13 04:19
题意
保证ai<=bi
分析
暴力做法很简单,设
观察题目给的约束,
我们简化状态,设
如何转移?
考虑x的意义
因为是取min,所以重复是没有问题的。 只需要考虑不漏下。
感性理解:
想象一个数轴上有j<=x<=k,j往前a[i],k往前b[i],一定在这些
满足
那么不卡在这个限制上的(j2,k2)对能被
手玩几个试试就知道了,因为它x’的区间与
这样直接用单调队列维护就可以了。
Demo
#include <cstdio>#include <iostream>#include <cstring>const int N=1010,P=1e4+10;using namespace std;int n,p;int a[N],b[N],c[N],ans;int f[N][P];int Q[P],head,tail;int main() { freopen("3.in","r",stdin); int T; for (cin>>T; T; T--) { cin>>n>>p; for (int i=1; i<=n; i++) scanf("%d",&a[i]); for (int i=1; i<=n; i++) scanf("%d",&b[i]); for (int i=1; i<=n; i++) scanf("%d",&c[i]); memset(f,127,sizeof f); f[0][0]=0; for (int i=1; i<=n; i++) { head=1; int rd=0; tail=0; for (int j=0; j<=p; j++) { for (; rd<=j-a[i]; ++rd) { while (head<=tail && f[i-1][ Q[tail] ]>=f[i-1][rd]) --tail; Q[++tail]=rd; } while (head<=tail && Q[head]<j-b[i]) ++head; f[i][j]=f[i-1][j]; if (head<=tail) f[i][j]=min(f[i][j],f[i-1][Q[head]]+c[i]); } } if (f[n][p]==f[n+1][0]) printf("IMPOSSIBLE!!!\n"); else printf("%d\n",f[n][p]); }}
阅读全文
0 0
- jzoj5259 线性规划问题 (巧妙设状态的dp)
- JZOJ5259. 线性规划问题
- UVa 1625 color length--dp状态转移的巧妙计算
- HDOJ - 3578 DP...巧妙构造DP状态
- 线性规划问题的matlab求解
- 线性规划问题的matlab求解
- CF822E,巧妙的字符串DP
- jzoj5408 【NOIP2017提高A组集训10.21】Dark (巧设状态的DP)
- 线性规划和约束满足问题的思考
- 用Python的pulp解决线性规划问题
- poj3557 一个很巧妙的概率dp
- 51nod 1086 背包问题V2 (巧妙dp,二进制)
- 线性规划(Matlab)丨线性规划问题与投资的收益和风险
- fzu1231dp状态设计巧妙
- DP问题各种模型的状态转移方程
- DP问题各种模型的状态转移方程
- DP问题各种模型的状态转移方程
- DP问题各种模型的状态转移方程
- Largest Rectangle in a Histogram--(单调队列orDP)
- java 多线程随笔(二)
- 深度学习实践笔记1——BP神经网
- 判断下列关键字序列是否为堆?
- datatables的初始化及刷新
- jzoj5259 线性规划问题 (巧妙设状态的dp)
- java持久层框架mybatis如何防止sql注入
- MAC,PIN的密钥体系
- P2345 奶牛集会/P2657 低头一族
- React-navigation 官方文档中文翻译(三) Configuring the Header
- iOS转前端之JS基本语法总结
- 电子设计大赛板球控制系统设计方案
- 题目399-整除个数(满满的套路)
- 【黑科技】钉钉自动打卡