/* 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. 卷积神经网络 cnnff.m程序 中的前向传播算法 数据 分步解析

    最近在学习卷积神经网络,哎,真的是一头雾水!最后决定从阅读CNN程序下手! 程序来源于GitHub的DeepLearnToolbox 由于确实缺乏理论基础,所以,先从程序的数据流入手,虽然对高手来讲, ...

  2. iOSシステム構成の纏め

    iOSのアーキテクチャ a)       iOSのアーキテクチャは階層化されている最上位レベルでは.iOSはそれが稼働しているハードウェアとアプリケーションの間の仲介役を果たします.アプリケーションが ...

  3. C#转义字符总结

    转义字符 \·一种特殊的字符常量:·以反斜线"\"开头,后跟一个或几个字符.·具有特定的含义,不同于字符原有的意义,故称“转义”字符.·主要用来表示那些用一般字符不便于表示的控制代 ...

  4. html5--indexedDB

    http://www.cnblogs.com/Johnny_Z/archive/2012/11/04/2753331.html http://database.51cto.com/art/201202 ...

  5. ArtisticStyle----很好用的C/C++样式格式化工具

    下载地址:http://srgb.googlecode.com/files/AStyle_2.02_windows.7z 把astyle.exe 复制到 C:\WINDOWS 目录里,省的指定路径VC ...

  6. Java_xml_Dom解析方式

    本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/12094775 1.Node准备 Node接口是整个文档对象模型的主要 ...

  7. 14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量

    14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量 InnoDB 使用后台线程来服 ...

  8. 深入浅出Node.js (附录C) - Node编码规范

    C.1 根源 C.2 编码规范 C.2.1 空格与格式 C.2.2 命名规范 C.2.3 比较操作 C.2.4 字面量 C.2.5 作用域 C.2.6 数组与对象 C.2.7 异步 C.2.8 类与模 ...

  9. nginx+tomcat配置https

    nginx代理https后,应用redirect https变成http,很多页面报404.情况类似http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.ht ...

  10. u-boot中分区和内核MTD分区关系

    一.u-boot中环境变量与uImage中MTD的分区关系 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 一般我们只需要分3-4 ...