博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[离散化][前缀和][DP][二分]JZOJ 5873 小p的属性
阅读量:6648 次
发布时间:2019-06-25

本文共 1373 字,大约阅读时间需要 4 分钟。

Description

 

Input

Output

 

Sample Input

2 42 1 101 2 20 

Sample Output

50
 

Data Constraint

分析

我们可以离散化之后处理二维前缀和(用二分找到位置)

然后DP方程显而易见

 

#include 
#include
#include
using namespace std;typedef long long ll;const int N=1e3+10;ll x[N],y[N],a[N][3];ll s[N][N],f[N][N];int n,m; int cnt,nx,ny;int Bin_Search(int val,bool ot) { int l=1,r=ot?ny:nx; while (l<=r) { int mid=l+r>>1; if (ot?y[mid]==val:x[mid]==val) return mid; if (ot?y[mid]
m) continue; a[++cnt][0]=a1;a[cnt][1]=a2;a[cnt][2]=a3; x[cnt]=a1;y[cnt]=a2; } sort(x+1,x+cnt+1);sort(y+1,y+cnt+1); nx=unique(x+1,x+cnt+1)-x-1;ny=unique(y+1,y+cnt+1)-y-1; for (int i=1;i<=cnt;i++) s[Bin_Search(a[i][0],0)][Bin_Search(a[i][1],1)]+=a[i][2]; for (int i=1;i<=nx;i++) for (int j=1;j<=ny;j++) s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1]; for (int i=1;i<=nx;i++) for (int j=1;j<=ny;j++) f[i][j]=s[i][j]+max(f[i-1][j]+(x[i]-x[i-1]-1)*s[i-1][j],f[i][j-1]+(y[j]-y[j-1]-1)*s[i][j-1]); ll lans=0; for (int i=1;i<=nx;i++) for (int j=1;j<=ny;j++) lans=max(lans,f[i][j]+(m-x[i]-y[j])*s[i][j]); printf("%lld",lans); fclose(stdin);fclose(stdout);}
View Code

 

转载于:https://www.cnblogs.com/mastervan/p/9688684.html

你可能感兴趣的文章
CloudStack4.1.1升级CloudPlatForm4.2.0实践手册
查看>>
Centos安装各种数据分析库,numpy,pandas,matplotlib,seaborn,scipy
查看>>
C#基础知识整理:C#类和结构(3)
查看>>
SharePoint Server 2010 初始化
查看>>
【我眼中的戴尔转型】(四)惠普之道,月亮的脸悄悄地在改变
查看>>
***S 2012 聚合函数 -- 指定分页示例
查看>>
直播疑难杂症排查(3)— 首开慢
查看>>
某公司机房成功搭建openssh server跳板服务器
查看>>
ADT在線互動教學
查看>>
PowerShell 添加 自定义的ScriptProperty 属性
查看>>
Shell一些例子
查看>>
MySQL 可优化的一些参数详解
查看>>
zabbix监控web页面,以及告警配置
查看>>
C#中传值调用和传引用调用的理解
查看>>
硬盘整数分区最精确地方法(转载)
查看>>
Oracle-压缩数据
查看>>
Exchange Server2010系列之十六:客户端访问方式
查看>>
crawler4j 爬爬知多少
查看>>
记录:Protocol Buffers(protobuf)在Java开发中使用
查看>>
关于Diablo3的历史和现状思考
查看>>