最优解一定是将起点、终点以及所有必经点连接成一棵树,对于每条树边恰好走两次,而从起点到终点的一条路径只走一次。

考虑连通性DP,设$f[i][j][k][x]$表示考虑完前$i$个走道,第$i$个走道底部和上部是否存在于树中,底部和上部是否和起点连通,走一次的路径端点是底部还是上部时的最小代价。

时间复杂度$O(NA^2)$。

#include<cstdio>
const int N=360,inf=100000000;
int m,n,A,B,i,j,k,x,a,b,nj,nk,nx,w,v[N][30],f[N][4][4][2],ans;
inline void up(int&a,int b){a>b?(a=b):0;}
inline int sum(int x,int l,int r){
int t=v[x][r];
if(l)t-=v[x][l-1];
return t;
}
int main(){
scanf("%d%d%d%d",&m,&n,&A,&B);A++;
while(m--)scanf("%d%d",&i,&j),v[i][j]=1;
for(i=0;i<=n;i++)for(j=0;j<4;j++)for(k=0;k<4;k++)for(x=0;x<2;x++)f[i][j][k][x]=inf;
f[0][1][1][0]=-B;
for(i=1;i<=n;i++)for(j=1;j<=A;j++)v[i][j]+=v[i][j-1];
for(i=0;i<n;i++)for(j=0;j<4;j++)for(k=1;k<4;k++)for(x=0;x<2;x++)if(f[i][j][k][x]<inf){
w=f[i][j][k][x];
for(a=0;a<=A;a++){
if(sum(i+1,0,a)<sum(i+1,0,A))continue;
nj=1;
if(a==A)nj|=2;
nk=k&1;
if((j>>1)&&!(k>>1))continue;
if(a==A)nk|=(k&1)<<1;
if(x==0){
up(f[i+1][nj][nk][0],w+B+a*2);
if(a==A)up(f[i+1][nj][nk][1],w+B+A);
}
}
for(a=0;a<=A;a++){
if(sum(i+1,a,A)<sum(i+1,0,A))continue;
nj=2;
if(a==0)nj|=1;
nk=(k>>1)<<1;
if((j&1)&&!(k&1))continue;
if(a==0)nk|=k>>1;
if(x==1){
up(f[i+1][nj][nk][1],w+B+(A-a)*2);
if(a==0)up(f[i+1][nj][nk][0],w+B+A);
}
}
for(a=0;a<=A;a++)for(b=a+1;b<=A;b++){
if(sum(i+1,0,a)+sum(i+1,b,A)<sum(i+1,0,A))continue;
nj=3;
nk=k;
up(f[i+1][nj][nk][x],w+B*3+(a+A-b)*2);
nk=k&1;
if(x==0)if(!(j>>1)||(k>>1))up(f[i+1][nj][nk][0],w+B+(a+A-b)*2);
nk=(k>>1)<<1;
if(x==1)if(!(j&1)||(k&1))up(f[i+1][nj][nk][1],w+B+(a+A-b)*2);
}
up(f[i+1][3][3][x],w+B*3+A*2);
up(f[i+1][3][3][x^1],w+B*3+A);
}
ans=f[n][1][1][0];
up(ans,f[n][3][3][0]);
return printf("%d",ans),0;
}

  

BZOJ2512 : Groc的更多相关文章

  1. 论文解读(GROC)《Towards Robust Graph Contrastive Learning》

    论文信息 论文标题:Towards Robust Graph Contrastive Learning论文作者:Nikola Jovanović, Zhao Meng, Lukas Faber, Ro ...

  2. Android自动化学习笔记:获取APK包名的几种方法

    ---------------------------------------------------------------------------------------------------- ...

  3. Pascal编译器大全(非常难得)

    http://www.pascaland.org/pascall.htm Some titles (french) : Compilateurs Pascal avec sources = compi ...

  4. Go-GRPC 初体验

    grpc 跟常见的client-server模型相似(doubbo)grpc 编码之前需要准备以下环境: 安装protobuf,grpc的client与server之间消息传递使用的protoc格式消 ...

  5. python模块大全

    python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...

  6. SAS笔记

    SAS基础知识 SAS里面的PROC一览 The ACECLUS Procedure : 聚类的协方差矩阵近似估计(approximate covariance estimation for clus ...

  7. C链表的简单案例

    此案例只是简单的使用链表 链表的特点: 1.不需要提前知道要存入数据的长度 2.最后结点为NULL 3.头结点指向下一个结点的结构体指针 #include <stdio.h> #inclu ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 论文解读(SimGRACE)《SimGRACE: A Simple Framework for Graph Contrastive Learning without Data Augmentation》

    论文信息 论文标题:SimGRACE: A Simple Framework for Graph Contrastive Learning without Data Augmentation论文作者: ...

随机推荐

  1. gitlab报错502及处理

    报错截图: 解决: 1.端口问题 如上面写的815端口,那配置文件的8080端口都改成815端口 之后重新载入配置文件,并开启 gitlab-ctl reconfigure gitlab-ctl st ...

  2. Git reset与checkout的区别

    reset: 将暂存区的文件回撤到工作区,文件内容不会有任何变化 checkout: 将工作区文件恢复到上一次commit时的内容,将会丢失修改了但未加入暂存区的内容

  3. 使用docker方式安装etcd集群,带TLS证书

    网上文档也多,安装的时候,还是踩了几个坑. 现在作一个安装记录吧. 1,先作自签名的证书ca-csr.json(为了和k8s共用根证书,可能将信息调为k8s). { "CN": & ...

  4. [转] 安装npm全局包提示权限不够

    方法1 sudo npm i -g npm 方法2 修改usr/local的权限.使用sudo有一个风险是安装包可能会运行自己的一些脚本,使sudo操作变的不可控,不安全.可以通过将/usr/loca ...

  5. uva 11992

    题意: 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x1<=x ...

  6. python中super的理解(转)

    原文地址:https://www.zhihu.com/question/20040039 针对你的问题,答案是可以,并没有区别.但是这题下的回答我感觉都不够好. 要谈论 super,首先我们应该无视 ...

  7. JMeter上传案例2

    今天自己的QQ群里有个朋友一直在问JMeter图片上传的问题 原始通过JMeter抓包如下: 参考: http://blog.csdn.net/huashao0602/article/details/ ...

  8. 执行shell脚本提示“-bash: ./checkP.sh: /bin/sh^M: bad interpreter: No such file or directory”解决方法

    在windows机器下新建了一个shell脚本如下

  9. Python学习(十七)—— 数据库(二)

    转载自http://www.cnblogs.com/linhaifeng/articles/7356064.html 一. 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中, ...

  10. Codeforces 915G Coprime Arrays 莫比乌斯反演 (看题解)

    Coprime Arrays 啊,我感觉我更本不会莫比乌斯啊啊啊, 感觉每次都学不会, 我好菜啊. #include<bits/stdc++.h> #define LL long long ...