CH

Sol

”凸联通块“是什么意思呢?

其实就是图形的左端点先减小再增大,右端点先增大再减小

阶段

考虑到第k行,已经选了i个格子

状态

1.第i行的左端点与右端点

2.这一行的左端点相对于上一行的左端点是递增还是递减

这一行的右端点相对于上一行的右端点是递增还是递减

所以,f[k][i][l][r][0/1][0/1]表示考虑完第k行,已经选了i个格子,这一行的左端点是l,右端点是r,左端点相对于上一行递增(0)/递减(1),这一行的右端点.......

转移

考虑p,q的范围以及通过上一行的四种状态的哪种转移而来

有这么四种情况:(p,q为枚举的上一行的左右端点)

1.左减右增

l<=p<=q<=r<=m 通过f[k][i][p][q][1][0]转移

2.左增右增

1<=p<=l<=q<=r<=m 通过f[k][i][p][q][0/1][0]转移

3.左减右减

l<=p<=r<=q<=m 通过f[k][i][p][q][1][0/1]转移

4.左增右减

1<=p<=l<=r<=q<=m 通过f[k][i][p][q][0/1][0/1]转移

Code

 #include<iostream>
#include<cstdio>
#include<cstring>
#define Rg register
#define il inline
#define go(i,a,b) for(Rg int i=a;i<=b;i++)
using namespace std;
int ans,n,m,K,ak,ai,al,ar,ax,ay,c[][],f[][][][][][];
struct node{int l,r,x,y;}a[][][][][][];
il void print(int k,int i,int l,int r,int x,int y)
{
if(!k || !i)return;
print(k-,i-(r-l+),a[k][i][l][r][x][y].l,a[k][i][l][r][x][y].r,a[k][i][l][r][x][y].x,a[k][i][l][r][x][y].y);
go(t,l,r)printf("%d %d\n",k,t);
}
int main()
{
freopen("CH5104.out","w",stdout);
scanf("%d%d%d",&n,&m,&K);
go(i,,n)go(j,,m)scanf("%d",&c[i][j]),c[i][j]+=c[i][j-];
go(k,,n)
go(i,,K)
go(l,,m)
go(r,l,m)
{
int sm=c[k][r]-c[k][l-],t=r-l+;
if(i<t)break;
//1,0 zuojian youzen
go(p,l,r)go(q,p,r)
if(f[k][i][l][r][][]<sm+f[k-][i-t][p][q][][])
f[k][i][l][r][][]=sm+f[k-][i-t][p][q][][],a[k][i][l][r][][]=(node){p,q,,};
//1,1 zuojian youjian
go(p,l,r)go(q,r,m)go(y,,)
if(f[k][i][l][r][][]<sm+f[k-][i-t][p][q][][y])
f[k][i][l][r][][]=sm+f[k-][i-t][p][q][][y],a[k][i][l][r][][]=(node){p,q,,y};
//0,1 zuozen youjian
go(p,,l)go(q,r,m)go(x,,)go(y,,)
if(f[k][i][l][r][][]<sm+f[k-][i-t][p][q][x][y])
f[k][i][l][r][][]=sm+f[k-][i-t][p][q][x][y],a[k][i][l][r][][]=(node){p,q,x,y};
//0,0 zuozen youzen
go(p,,l)go(q,l,r)go(x,,)
if(f[k][i][l][r][][]<sm+f[k-][i-t][p][q][x][])
f[k][i][l][r][][]=sm+f[k-][i-t][p][q][x][],a[k][i][l][r][][]=(node){p,q,x,};
if(i!=K)continue;
go(x,,)go(y,,)
if(ans<f[k][i][l][r][x][y]){ans=f[k][i][l][r][x][y];ak=k;ai=i;al=l;ar=r;ax=x;ay=y;}
}
printf("Oil : %d\n",ans);
print(ak,ai,al,ar,ax,ay);
return ;
}

随机推荐

  1. LeetCode59 Spiral Matrix II

    题目: Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. ...

  2. jmter对于函数的处理

    1.获取当天的时间函数 ${__time(yyyy-MM-dd_HH-mm-ss)} 2.获取随机函数 ${__Random(100,300,)} 3.查看结果数

  3. TCP/IP 、HTTP和SOCKET

    TCP/IP协议概念 TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这 ...

  4. oracle函数 RPAD(c1,n[,c2])

    [功能]在字符串c1的右边用字符串c2填充,直到长度为n时为止 [参数]C1 字符串 n 追加后字符总长度 c2 追加字符串,默认为空格 [返回]字符型 [说明]如果c1长度大于n,则返回c1左边n个 ...

  5. Shell 基本运算符 1

    Shell 和其他编程语言一样,支持多种运算符,包括: 算术运算符 关系运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr ...

  6. php parse_url linux 解析问题

    耕毅 解析url函数parse_url() (PHP 4, PHP 5, PHP 7) parse_url — 解析 URL,返回其组成部分 mixed parse_url ( string $url ...

  7. 关于Java语言for循环内外变量定义的问题

    今天看书时,看到一个代码,一个在循环外面没有用的变量,后即有了我的问题,在后面: 我的问题: 变量循环内定义,例如:while(true){String splitStr = null;}这“些”个s ...

  8. css设置Overflow实现隐藏滚动条的同时又可以滚动

    .scroll-list ul{ white-space: nowrap; -webkit-overflow-scrolling: touch; overflow-x: auto; overflow- ...

  9. 基于jQuery+JSON的省市联动效果

    省市区联动下拉效果在WEB应用中使用非常广泛,尤其在一些会员信息系统.电商网站最为常见,开发者一般使用AJAX实现无刷新下拉联动. 本文将讲述利用jQuery插件,通过读取JSON数据,实现无刷新动态 ...

  10. 【DCN】端口与地址绑定技术

    端口与地址绑定技术   与AM技术不同之处在于,AM端口下绑定的MAC或IP能够通信,不限制绑定的MAC在其它接口下通信.   开启MAC-CPU学习模式 mac-address-learning c ...