题意:给定a[i]a[i]a[i]和b[i]b[i]b[i],给个数的贡献是[a[i],b[i]][a[i],b[i]][a[i],b[i]]区间内不超过c[i]c[i]c[i]的值中的最小值

请给出最大值和每个贡献p[i]p[i]p[i],使得最后的答案最大。

若存在多组随便输出一组就行。

为啥这题给放到区间DP

没看出来啊

I.普通DP

设asd[i][j]asd[i][j]asd[i][j]表示[i,j][i,j][i,j]所能提供的最大贡献。

但是这个方程很难转移

并且,由于转移的过程中还需要记录具体的取值,所以需要一个qweqweqwe数组来记录

设qwe[i][j]qwe[i][j]qwe[i][j]表示区间[i,j][i,j][i,j]中的最小值

并且上面的[i,j][i,j][i,j]都是固定的(即题目给定的a[i]a[i]a[i]和b[i]b[i]b[i])

但是这道题需要在调整中寻找最优解

考虑再加一维。

设asd[i][j][k]asd[i][j][k]asd[i][j][k]表示区间[i,j][i,j][i,j],最小值≥k\geq k≥k 所提供的最大贡献。

最终的答案就是asd[1][n][1]asd[1][n][1]asd[1][n][1]

qwe[i][j][k]qwe[i][j][k]qwe[i][j][k]表示区间[i,j][i,j][i,j]中的最小值≥k\geq k≥k所造成的最优解的最小值的取值

一个结论:

一定存在一种方案,使得每家洗车店的价格p∈cp\in cp∈c


一个转移:

asd[i][j][k]=max(asd[i][j][k+1],cost(i,j,k))asd[i][j][k]=max(asd[i][j][k+1],cost(i,j,k))asd[i][j][k]=max(asd[i][j][k+1],cost(i,j,k))

其中cost(i,j,k)表示[i,j][i,j][i,j]的最小值正好取到kkk时的最大贡献。

再用v[i][j]v[i][j]v[i][j]表示iii位置上容忍度≥j\geq j≥j的人数

最终的转移方程就是:

cost(i,j,k)=max(asd[i][p-1][k]+asd[p+1][j][k]+v[p][k]*k);

但是还需要输出方案

通过上面所描述的做法,我们只需要记录第三维转移的具体值qweqweqwe和区间转移的具体位置 ppp 即可输出方案

#include<bits/stdc++.h>
using namespace std;
#define f1(a,b,c) for(int c=a;c<=b;c++)
#define f2(a,b,c) for(int c=a;c>=b;c--)
#define f3(a,b,c) for(int c=a;c;c=b)
#define so1(a,n) sort(a+1,a+n+1,mycmp);
#define so2(a,n) sort(a+1,a+n+1);
#define ll long long
#define itn int
#define ubt int
const int twx=5e3+100;
const int N=60;
const int inf=0x3f3f3f3f;
ll read()
{ll sum=0;ll flag=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){flag=-1;}c=getchar();}while(c>='0'&&c<='9'){sum=((sum*10)+c-'0');c=getchar();}return sum*flag;
}
int n,m;
int a[twx];
int b[twx];
int c[twx];
int d[twx];
int ans[N];
int asd[N][N][twx];
int qwe[N][twx];
int h[N][N][twx];
int pre[N][N][twx];
void print(int l,int r,int p)
{if(l>r){return;}p=pre[l][r][p];int k=h[l][r][p];ans[k]=d[p];print(l,k-1,p);print(k+1,r,p);return;
}
void init()
{n=read();m=read();f1(1,m,i){a[i]=read();b[i]=read();c[i]=d[i]=read();}so2(d,m)int cnt=unique(d+1,d+m+1)-d-1;f1(1,m,i){c[i]=lower_bound(d+1,d+cnt+1,c[i])-d;}f1(1,n,len){f1(1,n-len+1,i){int j=i+len-1;memset(qwe,0,sizeof qwe); f1(1,m,k){if(i<=a[k]&&b[k]<=j){f1(a[k],b[k],p){++qwe[p][c[k]];}}}f1(i,j,k){f2(cnt,1,p){qwe[k][p]+=qwe[k][p+1];}}f2(cnt,1,k){int MAX=0;f1(i,j,p){if(MAX<=asd[i][p-1][k]+asd[p+1][j][k]+qwe[p][k]*d[k]){MAX=asd[i][p-1][k]+asd[p+1][j][k]+qwe[p][k]*d[k];h[i][j][k]=p;//记录转移位置 }}if(MAX>=asd[i][j][k+1]){asd[i][j][k]=MAX;pre[i][j][k]=k;}else{asd[i][j][k]=asd[i][j][k+1];pre[i][j][k]=pre[i][j][k+1];}}}}printf("%d\n",asd[1][n][1]);print(1,n,1);f1(1,n,i){printf("%d ",ans[i]);}
}
void work()
{}
void print()
{}
int main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);init();return 0;
}

洗车Myjnie 题解相关推荐

  1. 笛卡尔树详解带建树模板及例题运用(Largest Submatrix of All 1’s,洗车 Myjnie,Removing Blocks,SPOJ PERIODNI)

    文章目录 笛卡尔树 介绍 例题 Largest Submatrix of All 1's 应用 「POI2015」洗车 Myjnie [AGC028B] Removing Blocks SPOJ PE ...

  2. bzoj4380[POI2015]Myjnie dp

    [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special Judge Submit: 368  Solved: 185 ...

  3. BZOJ 4380 Myjnie 区间DP

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

  4. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  5. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  6. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

  7. [JS]题解 | #岛屿数量#

    题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...

  8. [JS] 题解:提取不重复的整数

    题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...

  9. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

最新文章

  1. linux进程间通信:命名管道FIFO
  2. 电梯调度算法 软工 Pair Project
  3. python程序填空程序改错_Python - class dummyclass(object): 改错
  4. 笔记-高项案例题-2019年上-计算题
  5. 最简单的Angular Route hello world场景都跑不通的一个原因
  6. 数据结构----归并排序
  7. 【WebSocket初探 】
  8. java虚拟机——JVM
  9. cadence PCB板级设计
  10. RabbitMq(十) 消息过期时间TTL介绍以及代码实现
  11. c语言操作access数据类型,2016计算机二级《ACCESS》基本操作题及答案
  12. BZOJ3244 [Noi2013]树的计数 【数学期望 + 树遍历】
  13. 华为大数据平台使用pyhive连接hive的方法(Kerberos验证)
  14. java MD5完整加解密工具类
  15. 大数据应用领域都有哪些(一)
  16. 机器人无限火力无限e符文_无限火力快乐玩法:无限击飞机器人
  17. React报错 Too many re-renders
  18. java反编译工具gd gson,浅谈Android中static修饰符,及Gson转String实例
  19. 外贸老手告诉你:外贸实用工具
  20. shareSDK 微信分享闪退问题

热门文章

  1. kafka的常用命令
  2. VC TreeCtrl 添加图标 背景色透明
  3. 【Linux】-初识Linux
  4. Java培训完能不能就业?
  5. mul matlab,[转载]Matlab boxplot for Mul
  6. killnet软件怎么用_Wifi Kill怎么用 WIFI KILL助你全方位独霸局域网
  7. 网易163企业邮箱注册申请,有什么优惠活动
  8. person_reID
  9. 微软发布InstaLoad电池技术 不考虑极性
  10. 谷歌小恐龙游戏源代码(1)