/* poj 1821 n*n*m 暴力*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 110
#define maxm 16010
using namespace std;
int n,m,f[maxn][maxm],ans;
struct node{
int l,s,p;
bool operator < (const node &x) const {
return s<x.s;
}
}a[maxn];
int max(int x,int y){
return x>y?x:y;
}
int main()
{
while(~scanf("%d%d",&n,&m)){
for(int i=;i<=m;i++)
scanf("%d%d%d",&a[i].l,&a[i].p,&a[i].s);
memset(f,,sizeof(f));ans=;
sort(a+,a++m);//排序s为关键字
for(int i=;i<=m;i++){//状态表示 前i个人 干到j这里 的最优值
int x=min(n,a[i].s+a[i].l-);//i最多干到哪
for(int j=;j<=n;j++){
f[i][j]=max(f[i][j-],f[i-][j]);//i不干j 可以是j-1的状态 也可以是上一个人干到j的状态
if(j<a[i].s||j>x)continue;//i必须停在这个范围里 也就是状态在这个范围
for(int k=;k<a[i].s;k++){//上一个人 i-1 他不能把i的起点覆盖了 否则i就走不了了
if(j-k>a[i].l)continue;//i要把k-j的都盖了 长度有限制
f[i][j]=max(f[i][j],f[i-][k]+(j-k)*a[i].p);
}
ans=max(ans,f[i][j]);
}
}
printf("%d\n",ans);
} return ;
}
/*
poj 1821 单调队列优化
wa到挺了.....
一开始队列指针写错了...
好吧平时用STL最近手打在改习惯改乱了.
开始一直混乱着
不知道怎么保证队列里存的是i-1的状态而不是i的
根据方程的含义来看 上次不能盖了这次的s 这次还至少到s
正好分开了 多以存的时候分开
第一个for是存i-1的状态
后一个是更新i
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 110
#define maxm 16010
using namespace std;
int n,m,f[maxn][maxm],ans;
int q[maxm],head,tail;
struct node{
int l,s,p;
bool operator < (const node &x) const {
return s<x.s;
}
}a[maxn];
int max(int x,int y){
return x>y?x:y;
}
int main()
{
while(~scanf("%d%d",&n,&m)){
for(int i=;i<=m;i++)
scanf("%d%d%d",&a[i].l,&a[i].p,&a[i].s);
memset(f,,sizeof(f));ans=;
sort(a+,a++m);
for(int i=;i<=m;i++){
head=;tail=;
for(int j=;j<=n;j++)
f[i][j]=max(f[i-][j],f[i][j-]);
int L=max(,a[i].s-a[i].l);
int R=min(n,a[i].s+a[i].l-);
for(int j=L;j<a[i].s;j++){
int x=f[i-][j]-j*a[i].p;
while(head<=tail&&f[i-][q[tail]]-q[tail]*a[i].p<x)tail--;
q[++tail]=j;
}
for(int j=a[i].s;j<=R;j++){
while(head<=tail&&j-q[head]>a[i].l)head++;
int y=q[head];
f[i][j]=max(f[i][j],f[i-][y]+(j-y)*a[i].p);//这里要取大
ans=max(ans,f[i][j]);
}
}
printf("%d\n",ans);
}
return ;
}

poj 1821 Fence 单调队列优化dp的更多相关文章

  1. POJ 1821 Fence(单调队列优化DP)

    题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...

  2. $Poj1821\ Fence\ $单调队列优化$DP$

    Poj   Acwing Description 有N块木板等待被M个工匠粉刷,每块木板至多被刷一次.第i个工匠要么不粉刷,要么粉刷包含木块Si的,长度不超过Li的连续的一段木板,每粉刷一块可以得到P ...

  3. Dividing the Path POJ - 2373(单调队列优化dp)

    给出一个n长度的区间,然后有一些小区间只能被喷水一次,其他区间可以喷水多次,然后问你要把这个区间覆盖起来最小需要多少喷头,喷头的半径是[a, b]. 对于每个只能覆盖一次的区间,我们可以把他中间的部分 ...

  4. poj1821 Fence(单调队列优化dp)

    地址 一排N个木板,M个工匠站在不同位置$S_i$,每个人可以粉刷覆盖他位置的.最长长度为$L_i$木板段,每刷一个有$P_i$报酬.同一木板只刷一次.求最大报酬. 根据每个人的位置dp,设$f[i] ...

  5. 单调队列优化DP——习题收集

    前言 感觉可以用单调队列优化dp的模型还是挺活的,开个随笔记录一些遇到的比较有代表性的模型,断续更新.主要做一个收集整理总结工作. 记录 0x01 POJ - 1821 Fence,比较适合入门的题, ...

  6. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

  7. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

  8. bzoj1855: [Scoi2010]股票交易--单调队列优化DP

    单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...

  9. hdu3401:单调队列优化dp

    第一个单调队列优化dp 写了半天,最后初始化搞错了还一直wa.. 题目大意: 炒股,总共 t 天,每天可以买入na[i]股,卖出nb[i]股,价钱分别为pa[i]和pb[i],最大同时拥有p股 且一次 ...

随机推荐

  1. Contest 20140923 潛行世界 拓撲排序,期望

    潜行世界 查看 提交 统计 提问 总时间限制:  10000ms 内存限制:  256000kB 描述 HJA和学弟还在旅游中,这次他们来到了潜行世界.潜行世界是一个N个点M条边的有向无环图.每条路对 ...

  2. java + spring (jython\python\script) Error:SyntaxError: no viable alternative at character '\n'

    使用Jython结合java和Python开发功能时,要是遇到如下情况: 2016-03-10 16:16:49 DEBUG [com.freedom.orion.configs.JyhtonConf ...

  3. 调优UWSGI,后台启动,热更改PY,杜绝502

    记得加启动参数: --daemonize /var/log/uwsgi.log --post-buffering 32768 --buffer-size 32768 reload.set #!/bin ...

  4. 【UVA1379】Pitcher Rotation (贪心+DP)

    题意: 你经营者一直棒球队.在接下来的g+10天中有g(3<=g<=200)场比赛,其中每天最多一场比赛.你已经分析出你的n(5<=n<=100)个投手中每个人对阵所有m个对手 ...

  5. 深入剖析Java中的装箱和拆箱(转)

    自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 以下是本文的 ...

  6. lc面试准备:Repeated DNA Sequences

    1 题目 All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: &quo ...

  7. WordPress wp-admin/includes/post.php脚本安全漏洞

    漏洞名称: WordPress wp-admin/includes/post.php脚本安全漏洞 CNNVD编号: CNNVD-201309-168 发布时间: 2013-09-13 更新时间: 20 ...

  8. Visual Studio 2013新功能

    微软打破了Visual Studio两年升级一次的传统,Visual Studio 2012发布还不足一年,微软就计划发布了Visual Studio 2013了.在今天的TechEd大会上,微软宣布 ...

  9. Linux学习笔记12——Unix中的进程

    通过调用fork和exec函数都能创建新的进程,但两者有着本质的区别:fork函数拷贝了父进程的内存映像,而exec函数用用新的映像来覆盖调用进程的进程映像的功能. 一  fork函数 #includ ...

  10. eclipse配置j2ee项目

    1.下载jdk (1.5,1.6) 安装 从sun的官方网站下载,我下的是jdk-1_5_0_19-nb-6_5_1-windows-ml.exe,集成netbean的版本,下载后一路默认安装. 配置 ...