[POI2015]Myjnie

Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special Judge
Submit: 368  Solved: 185
[Submit][Status][Discuss]

Description

有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]。
有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个进行一次消费。但是如果这个最便宜的价格大于c[i],那么这个人就不洗车了。
请给每家店指定一个价格,使得所有人花的钱的总和最大。

Input

第一行包含两个正整数n,m(1<=n<=50,1<=m<=4000)。
接下来m行,每行包含三个正整数a[i],b[i],c[i](1<=a[i]<=b[i]<=n,1<=c[i]<=500000)

Output

第一行输出一个正整数,即消费总额的最大值。
第二行输出n个正整数,依次表示每家洗车店的价格p[i],要求1<=p[i]<=500000。
若有多组最优解,输出任意一组。

Sample Input

7 5
1 4 7
3 7 13
5 6 20
6 7 1
1 2 5

Sample Output

43
5 5 13 13 20 20 13

HINT

 

Source

 
出题人https://www.cnblogs.com/clrs97/p/5271139.html
ysy 

 #include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> #define N 55
#define M 4007
#define maxc 500007
using namespace std; int n,m;
int f[N][N][M],g[N][N][M],h[N][M];
int p[N][N][M],val[N];
int C[M],lsh[maxc],LSH[M],K; inline void up(int &x,const int &y)
{
if(x<y)x=y;
}
struct node
{
int a,b,c;
}a[M];
inline bool cmp(node x,node y)
{
return x.b==y.b?x.a<y.a:x.b<y.b;
}
void pre()
{
sort(a+,a+m+,cmp); sort(C+,C+m+); K=;
for(int i=;i<=m;i++)
if(C[i]!=C[i-]) LSH[++K]=C[i],lsh[C[i]]=K;
for(int i=;i<=m;i++) a[i].c=lsh[a[i].c];
}
void search(int l,int r,int k)
{
if(l>r) return ;
if(!g[l][r][k])
{
for(int i=l;i<=r;i++) val[i]=LSH[k];
return ;
}
for(int i=k;i<=K;i++) if(g[l][r][k]==f[l][r][i])
{
const int pos=p[l][r][i];
val[pos]=LSH[i];
search(l,pos-,i); search(pos+,r,i);
break;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].c),C[i]=a[i].c;
pre();
for(int l=n;l>=;l--)
for(int r=l;r<=n;r++)
{
for(int i=l;i<=r;i++)
for(int j=;j<=K;j++) h[i][j]=;
for(int i=;i<=m&&a[i].b<=r;i++)
{
if(a[i].a<l) continue;
for(int j=a[i].a;j<=a[i].b;j++)
h[j][a[i].c]++;
}
for(int i=l;i<=r;i++)
for(int j=K-;j>=;j--)
h[i][j]+=h[i][j+];
for(int i=l;i<=r;i++)
for(int j=K;j>=;j--)
{
int tmp=g[l][i-][j]+g[i+][r][j]+h[i][j]*LSH[j];
if(f[l][r][j]<tmp) f[l][r][j]=tmp,p[l][r][j]=i;
g[l][r][j]=g[l][r][j+]>f[l][r][j]?g[l][r][j+]:f[l][r][j];
}
}
printf("%d\n",g[][n][]);
search(,n,);
for(int i=;i<=n;i++)
printf("%d ",val[i]);
}

bzoj4380[POI2015]Myjnie dp的更多相关文章

  1. 2018.10.22 bzoj4380: [POI2015]Myjnie(区间dp)

    传送门 区间dp好题. f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]最小值为kkk时的最大贡献. 然后可以枚举端点转移. 当时口胡到这儿就不会了. ...

  2. BZOJ4380 : [POI2015]Myjnie

    将$c$离散化,设: $f[i][j][k]$为区间$[i,j]$最小值为$k$的最大收益. $g[i][j][k]$为$\max(g[i][j][k..m])$. $h[i][j]$为对于当前DP区 ...

  3. BZOJ 4380 [POI2015]Myjnie | DP

    链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...

  4. 【BZOJ4380】[POI2015]Myjnie 区间DP

    [BZOJ4380][POI2015]Myjnie Description 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i].有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[ ...

  5. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  6. 【BZOJ 4380】4380: [POI2015]Myjnie (区间DP)

    4380: [POI2015]Myjnie Description 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i].有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗 ...

  7. [POI2015]Myjnie

    [POI2015]Myjnie 题目大意: 有\(n(n\le50)\)家洗车店从左往右排成一排,每家店都有一个正整数价格\(d_i\). 有\(m(m\le4000)\)个人要来消费,第\(i\)个 ...

  8. bzoj [POI2015]Myjnie

    [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special Judge Description 有n家洗车店从左往右排成一排, ...

  9. 【BZOJ】4380: [POI2015]Myjnie

    题解 区间dp,先离散化所有价值 \(f[i][j][k]\)表示\([i,j]\)区间里最小值为\(k\)的价值最大是多少 只考虑\(i <= a <= b <= j\)的区间,枚 ...

随机推荐

  1. Return-to-dl-resolve浅析

    本文介绍一种CTF中的高级rop技巧-Return-to-dl-resolve,不久前的0CTF中的babystack和blackhole就用到了这个技巧. 预备知识 在开始本文前希望大家能预先了解一 ...

  2. solr dataimport

    solrconfig.xml <requestHandler name="/dataimport" class="org.apache.solr.handler.d ...

  3. linux apache 不解析php文件显示源码

    首先检查是否安装PHP 没有的话就先安装 如果安装过 在/etc/httpd/conf/httpd.conf文件中 在<IfModule mime_module>里面 AddType ap ...

  4. 梁勇 java教材 编程练习题 第二章 2.6 键盘 读取一个在0 到 9999 之间的整数,并将该整数的各位数字相加。

    import java.util.Scanner; /** * 需求:从键盘输入任意0~9999之间的整数,输出这个整数各位数字之和. * 思路:方法一,使用扫描器Scanner类,扫描控制台输入流 ...

  5. oracle常用运维sql语句

    1.查询dblink语句 col owner for a20col db_link for a30col username for a20col host for a30set linesize 12 ...

  6. 【Django】Django中datetime的处理(strftime/strptime)

    strftime<将date,datetime,timezone.now()类型处理转化为字符串类型> strftime()函数是用来格式化一个日期.日期时间和时间的函数,支持date.d ...

  7. Date.prototype.Format---对Date的扩展

    // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...

  8. ospf多区域实例配置

    需求:是pc1,pc2,pc3直接可以相互通信,ip分别pc1:192.168.1.2 pc2:192.168.3.2 pc3:192.168.5.2 LSW1配置: 首先划分vlan,vlan中配置 ...

  9. 利用DOM的方式点击切换图片及修改文字

    本案例主要学习理解,用到的几个DOM方法 01.getAttribute()方法,获取元素的属性值 02.setAttribute('src',source) 方法,用后边的值修改前边这个元素的属性值 ...

  10. debug模式开启会做哪些事(源码分析)

    以往开发中不管是django框架下开发还是其它框架下开发, 只知道在开发阶段要开启debug模式, 却一直没有深究它会我们做哪些事, 今天使用tornado时偶然看到源码中写的很清楚,故写下来加深印象 ...