$CH5104\ I-country$ 线性$DP$
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 ;
}
随机推荐
- This cache store does not support tagging.
用户权限管理系统 https://github.com/Zizaco/entrust 再添加角色的时候... 报了一个错.. BadMethodCallException in Repository. ...
- 网上很多laravel中cookie的使用方法。
https://blog.csdn.net/chen529834149/article/details/75244718 概述 Cookie的添加其实很简单,直接使用Cookie::make(),在使 ...
- uniapp APP端使用指纹
使用插件指纹模板: https://ext.dcloud.net.cn/plugin?id=358 Fingerprint模块管理指纹识别 要使用指纹识别功能需要具备条件: 确认当前设备环境是否支持指 ...
- js日期拓展方法
最近项目中使用了大量关于日期的操作遂将其整理如下: /** * 格式化日期 * @param {String} fmt [日期类型 默认为年月日(yyyy-MM-dd)] */ Date.protot ...
- poj 1092 Farmland (Geometry)
1092 -- Farmland 怎么最近做几何题都这么蛋疼,提交C++过不了交G++就过了.据我估计,原因是用了atan2这个函数,或者是其他一些函数造成了精度的影响.不管怎样,这题最后还是过了~ ...
- hdu 1532 Drainage Ditches(最大流模板题)
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- CSS像素设置为整数,渲染结果像素带有小数
今天进行网页设计学习时,CSS代码设计width:300px,但实际显示像素如下图所示为199.99px. 最后发现是浏览器运用了缩放,恢复100%的缩放后,像素显示为整数.
- 程序中打开IE浏览器并访问指定地址
最简单的方法 Process.Start("iexplore.exe"); //直接打开IE浏览器(打开默认首页) Process.Start(" ...
- Python--day65--Django框架介绍
原文链接:http://www.cnblogs.com/liwenzhou/p/8296964.html 做web开发用的是MVC框架: Django框架简介 MVC框架和MTV框架(了解即可) MV ...
- tensorflow学习笔记(四十五):sess.run(tf.global_variables_initializer()) 做了什么?
当我们训练自己的神经网络的时候,无一例外的就是都会加上一句 sess.run(tf.global_variables_initializer()) ,这行代码的官方解释是 初始化模型的参数.那么,它到 ...