BZOJ3934 : [CQOI2015]标识设计

轮廓线插头DP。

设$f[i][j][a][b][c][d][e]$表示考虑到了$(i,j)$,轮廓线上3个下插头的位置分别为$a,b,c$,是否有右插头,已经放了$e$个$L$的方案数。

然后直接DP即可。

时间复杂度$O(nm^4)$。

#include<cstdio>
const int N=33,M=4530;
int n,m,cnt,o,i,j,k,x,id[N][N][N];long long f[2][M][2][4];char a[N];
struct P{int a,b,c;P(){}P(int _a,int _b,int _c){a=_a,b=_b,c=_c;}}q[M];
int main(){
  scanf("%d%d",&n,&m);
  for(i=0;i<=m;i++)for(j=i?i+1:0;j<=m;j++)for(k=j?j+1:0;k<=m;k++)q[cnt++]=P(i,j,k);
  for(i=0;i<cnt;i++){
    id[q[i].a][q[i].b][q[i].c]=i;
    id[q[i].a][q[i].c][q[i].b]=i;
    id[q[i].b][q[i].a][q[i].c]=i;
    id[q[i].b][q[i].c][q[i].a]=i;
    id[q[i].c][q[i].a][q[i].b]=i;
    id[q[i].c][q[i].b][q[i].a]=i;
  }
  for(f[0][0][0][0]=i=1;i<=n;i++){
    for(k=0;k<cnt;k++)for(x=0;x<4;x++)f[o][k][1][x]=0;
    scanf("%s",a+1);
    for(j=1;j<=m;j++){
      o^=1;
      for(k=0;k<cnt;k++)for(x=0;x<4;x++)f[o][k][0][x]=f[o][k][1][x]=0;
      for(k=0;k<cnt;k++)for(x=0;x<4;x++){
        if(f[o^1][k][0][x]){
          if(a[j]==‘.‘){
            f[o][k][0][x]+=f[o^1][k][0][x];
            if(q[k].a==j)f[o][id[0][q[k].b][q[k].c]][1][x]+=f[o^1][k][0][x];
            else if(q[k].b==j)f[o][id[q[k].a][0][q[k].c]][1][x]+=f[o^1][k][0][x];
            else if(q[k].c==j)f[o][id[q[k].a][q[k].b][0]][1][x]+=f[o^1][k][0][x];
            else if(x<3)f[o][id[j][q[k].b][q[k].c]][0][x+1]+=f[o^1][k][0][x];
          }else if(q[k].a!=j&&q[k].b!=j&&q[k].c!=j)f[o][k][0][x]+=f[o^1][k][0][x];
        }
        if(f[o^1][k][1][x]&&a[j]==‘.‘){
          if(q[k].a==j||q[k].b==j||q[k].c==j)continue;
          f[o][k][0][x]+=f[o^1][k][1][x];
          f[o][k][1][x]+=f[o^1][k][1][x];
        }
      }
    }
  }
  return printf("%lld",f[o][0][0][3]),0;
}

  

时间: 2024-08-09 14:48:44

BZOJ3934 : [CQOI2015]标识设计的相关文章

BZOJ 3931: [CQOI2015]网络吞吐量

3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1555  Solved: 637[Submit][Status][Discuss] Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最快的到达目的地,路由器需要选择最优的路径转发数据包.例如在常用的路由算法OSPF(开放式最短路径优先)中

BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )

最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> #include<iostre

BZOJ 3930: [CQOI2015]选数

3930: [CQOI2015]选数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1130  Solved: 532[Submit][Status][Discuss] Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研究.然而他很快发现工作量太大了,于是向你寻求帮助.你的任务很简

3932: [CQOI2015]任务查询系统

3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2559  Solved: 819[Submit][Status][Discuss] Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行 ),其优先级为P

bzoj3931: [CQOI2015]网络吞吐量

将最短路图找出来,跑maxflow即可.有注意到数据范围.然后输出的时候%dWA了三次QAQ... #include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<algorithm> using namespace std; #define rep(i,n) for(int i=1;i<=n;i++) #define ll long long #

bzoj3931【CQOI2015】网络吞吐量

3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 853  Solved: 381 [Submit][Status][Discuss] Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最快的到达目的地,路由器需要选择最优的路径转发数据包.例如在常用的路由算法OSPF(开放式最短路径优先)

CQOI2015 后3题解题报告

这个嘛= =,CQOI我只做了后面3题(前面两题老师还没考就还不敢写= =)说一下被虐报告吧= = T3:[CQOI2015]任务查询系统 描述:戳我~~~ 这道题首先很明显是道裸的数据结构题啦.首先他要求在线,那么按顺序建个函数式线段树就行啦 自己太弱调了好久= = CODE: 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #inclu

CQOI2015 选数+酱油记

昨天我们考了CQOI2015的题..那还是找一道最可做的写一写好了>.<.. 考试的结果还是不多说了..反正我是知道暴力乱搞高精度的重要性了..骗分的OI才有随机性才好玩,嘛... 成绩不忍直视但竟然还没出前三..感人肺腑... 怎么觉得自从看了CLJ犇的Blog之后越来越喜欢模仿他们的语气卖萌了呢~~ 还是总结一下考试好了,嗯... 感觉我考的时候还是不太在状态..然后有的题目想出来了之后就不太想打了= =..然后四处duang啊duang..时间一下子就过去了呢>.< 根据C老

【BZOJ】【3931】【CQOI2015】网络吞吐量

最短路+最大流 思维难度并不高,其实题面几乎已经把算法讲完了…… 练习模板的好题= = 哦对了,求最短路和最大流的时候都得开long long……QwQ 1 /************************************************************** 2 Problem: 3931 3 User: Tunix 4 Language: C++ 5 Result: Accepted 6 Time:316 ms 7 Memory:12256 kb 8 ********