首页 > 其他分享 >P7668 [JOI2018] Dango Maker

P7668 [JOI2018] Dango Maker

时间:2023-02-11 12:12:46浏览次数:38  
标签:P7668 ch JOI2018 long pair using 左下 Maker define

Solution

我们可以把一个符合要求的团子记录在中间那个 G 中,那么两个团子可能冲突,只有可能当前 G 竖着可以横着也可以,或者说两个或多个 G 在同一条 右上-左下 的对角线上。

image

如图,只有这两种情况会冲突,当然两种情况也有可能重叠。

于是我们把所有符合要求的 右上-左下 对角线的所有 G 全抠出来做 dp,最后合并答案即可。

设 \(f(i,0/1/2)\) 表示每个 G 不选、横选、竖选,线性做一遍就没了。时间复杂度 \(O(nm)\)。

Code

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mkp make_pair
#define fi first
#define se second
using ll=long long;
using pii=pair<int,int>;
using pll=pair<ll,ll>;
using ull=unsigned long long;
inline void read(int &x){
  char ch=getchar();
  int r=0,w=1;
  while(!isdigit(ch))w=ch=='-'?-1:1,ch=getchar();
  while(isdigit(ch))r=(r<<1)+(r<<3)+(ch^48),ch=getchar();
  x=r*w;
}
const int N=3007,inf=1e9;
int n,m,f[N][3],tot,ans;
char c[N][N];
struct node{
  bool ok1,ok2;
}a[N][N],b[N];
bool used[N][N];
int dp(int n){
  // printf("debug n:%d\n",n);
  for(int i=1;i<=n;i++)f[i][0]=f[i][1]=f[i][2]=-inf;
  f[1][0]=0;f[1][1]=b[1].ok1?1:-inf;f[1][2]=b[1].ok2?1:-inf;
  for(int i=2;i<=n;i++){
    f[i][0]=max({f[i-1][0],f[i-1][1],f[i-1][2]});
    if(b[i].ok1)f[i][1]=max(f[i-1][0],f[i-1][1])+1;
    if(b[i].ok2)f[i][2]=max(f[i-1][0],f[i-1][2])+1;
  }
  return max({f[n][0],f[n][1],f[n][2]});
}
int main(){
  read(n);read(m);
  for(int i=1;i<=n;i++)scanf("%s",c[i]+1);
  for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
    if(c[i][j]=='G'&&c[i][j-1]=='R'&&c[i][j+1]=='W')a[i][j].ok1=1;
    if(c[i][j]=='G'&&c[i-1][j]=='R'&&c[i+1][j]=='W')a[i][j].ok2=1;
  }
  for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
    tot=0;
    int x=i,y=j;
    while((a[x][y].ok1||a[x][y].ok2)&&x>0&&x<=n&&y>0&&y<=m&&!used[x][y])
      b[++tot]=a[x][y],used[x][y]=1,x++,y--;
    if(tot)ans+=dp(tot);
  }
  cout<<ans;
  return 0;
}

标签:P7668,ch,JOI2018,long,pair,using,左下,Maker,define
From: https://www.cnblogs.com/LAK666/p/17111178.html

相关文章

  • Pacemaker+Corosync搭建PostgreSQL集群
    一、环境$ cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) $ uname -aLinux zhaopin-5-90 3.10.0-123.el7.x86_64 #1 SMP Mon Jun......
  • [教程]跟着思兼学习Klipper(20)Makerbase MKS SKIPR 船长板 简要使用记录
    【思兼】MakerbaseMKSSKIPR船长板简要使用记录前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。文章如有更新请访问DFRobot社区或者cnblogs......
  • 关于pacemaker中资源启动的位置约束Location Constraints
    默认情况,对于业务应用的资源启动在那里,可能是随机的、有时启动在app01上,也可能启动在app02了我们也可以通过手动配置分数的方式,将某个节点的分数配置到极高,无穷大,这样,资......
  • FreeMaker入门介绍
    一、FreeMaker介绍FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT、电子邮件、配置文件、源代码等)的工具,它不是面向最终用户的,而是一款程序员使用......
  • Centos7.7下建立无共享存储的WEB集群(pcs+pacemaker+corosync)
    规划设计操作系统安装群集组件安装群集节点准备2创建VIP资源3创建Web/Apache资源4配置约束5群集测试1.准备工作(重要)群集组件和节点的准备我在另一张博客中已经介绍,可以参考......
  • Luogu P4592 [TJOI2018]异或 做题记录
    随机跳的。树上维护序列,显然树剖。维护异或,显然01trie。01trie维护区间异或,显然可持久化一下。看到时限很大,显然可以双log。于是跑一边树剖,再根据id暴力建一个可......
  • Luogu P4591 [TJOI2018] 碱基序列
    链接难度:\(\texttt{省选/NOI-}\)有\(k\)组,每一组有\(a_i\)个字符串\(t_{k,a_i}\),询问分别在每一组选一个字符串拼成的字符串在文本串\(s\)出现的个数的所有情况......
  • LibreOJ L2576 「TJOI2018」str
    链接难度:\(\texttt{?}\)有\(k\)组,每一组有\(a_i\)个字符串\(t_{k,a_i}\),询问分别在每一组选一个字符串拼成的字符串在文本串\(s\)出现的个数的所有情况的总和对......
  • Haproxy+PaceMaker实现高可用负载均衡集群
    Haproxy+PaceMaker实验配置:server1,server2:集群节点server3,server4:后端服务器在server1配置haproxy:[root@server1~]#lsasciidoc-8.4.5-4.1.el6.noarch.rpmlibnfnet......
  • 01-Pacemaker
    注意:SQLServerLinux需要依赖PaceMaker,其它服务不需要安装安装PaceMaker安装yuminstall-ypacemakerpcsfence-agents-allresource-agentspacemaker是服务程序,pc......