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. HTML的优化

    HTML的优化 : 1).h标签的使用: 要注意的是,不论任何页面,h1标签只能出现一次,它是当前页面的主标题,权重最高, 所以要慎用 . 一般情况下,如果有关键词的话最好是在h1里面出现. h2是表 ...

  2. ras 加解密类,支持截取

    class RsaEncrypt{ private $_privateKey = false; private $_publicKey = false; /** * 私钥解密 * @param $da ...

  3. vue+element-ui 字体自适应不同屏幕

    项目背景:屏幕自适应问题,当在不同分辨率的屏幕上显示页面时,页面的字体需要根据屏幕大小来自适应,想到使用rem作为字体的单位 vue-cli脚手架下的index.html中写入以下js脚本 <s ...

  4. Class对象的isAssignableFrom方法

    isAssignableFrom 在看一个开源代码时,在加载完某个Class对象后,经常会使用 java.lang.Class#isAssignableFrom 来校验下. 之前真没有注意过Class ...

  5. thinkphp3.2如何自动生成后台模块并且怎么访问

    https://blog.csdn.net/whulovely/article/details/72773729 步骤一:在入口文件index.php下绑定Admin模块(这时候别再Home同级手动创 ...

  6. Hex编码

    编码原理 Hex编码就是把一个8位的字节数据用两个十六进制数展示出来,编码时,将8位二进制码重新分组成两个4位的字节,其中一个字节的低4位是原字节的高四位,另一个字节的低4位是原数据的低4位,高4位都 ...

  7. P1021 整数奇偶排序

    整数奇偶排序 题目出处:<信息学奥赛一本通>第二章上机练习6,略有改编 题目描述 告诉你包含 \(n\) 个数的数组 \(a\) ,你需要把他们按照"奇数排前面,偶数排后面:奇数 ...

  8. 2018-9-3-C#-const-和-readonly-有什么区别

    title author date CreateTime categories C# const 和 readonly 有什么区别 lindexi 2018-9-3 16:52:7 +0800 201 ...

  9. H3C 示例:根据子网数划分子网

  10. 2019-3-8-为何使用-DirectComposition

    title author date CreateTime categories 为何使用 DirectComposition lindexi 2019-3-8 8:56:9 +0800 2018-04 ...