【AtCoder】【AGC017F】Zigzag

Atcoder AGC017 简要题解 传送门 Snuke and Spells 答案等于nnn条线段[i−cnti+1,i][i-cnt_i+1,i][i−cnti​+1,i]覆盖不到1∼n1\sim n1∼n的位置,每次只修改一个地方可以O(1)O(1)O(1)维护。 #include <bits/stdc++.h> using namespace std; const int RLEN=1<<18|1;... 阅读详情

Description

给出一个类似杨辉三角的三角形,要求在上边选出m条走n步的路径,并满足:
1. 每条路径只能往左下/右下走,;
2. 第i+1条路径必须在第i条路径的右侧(可以重合);

在给出一些要求,规定第x条路径的第y步一定往左下/右下走。
求方案数mod109+7mod109+7

Solution

题意转化:构造m个n位二进制数,设si,xsi,x表示第i个数前x位有多少个为1,则构造的数要满足si,j≤si+1,jsi,j≤si+1,j,

O(n22n)O(n22n)的DP显然,考虑优化,

我们看100101这个数对那些数有贡献,
100101
101001
110001
110010
110011…..
发现,每次相当于把一个1往前移动,或者添加一个1,
考虑用这个来优化,

设f[i][j][S]表示做到第i个数,当前数的前j位和S的前j位一样,
转移:
当前数第j位要为1,s第j位也为1,直接转移到j+1;
0同理,
当前数第j位要为0,s第j位为1,不合法;
当前数第j位要为1,s第j位为0,
那么,就找到s在第j位以后的第一个1,把它变成0,再把第j位变成1,(前移)
如果后面没有,就之间吧第j位变成1(添加)

这样每做一个数,答案就是f[i][n][s],

复杂度:O(n22n)O(n22n)

Code


#include <cstdio>
#include <cstdlib>
#define fo(i,a,b) for(register int i=a;i<=b;++i)
#define fod(i,a,b) for(register int i=a;i>=b;--i)
using namespace std;
const int N=22,mo=1e9+7;
int read(int &n)
{
    char ch=' ';int q=0,w=1;
    for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
    if(ch=='-')w=-1,ch=getchar();
    for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
int m,n,m1,ans;
int a[N][N];
int f[2][N][1<<20];
int er[N+10];
int zx[1<<21][22];
int main()
{
    freopen("!.in","r",stdin);
//  freopen(".out","w",stdout);
    int q,w,e;
    er[1]=1;fo(i,2,22)er[i]=er[i-1]<<1;
    read(n),read(m),read(m1);--n;
    fo(i,1,m1)read(q),read(w),a[q][w]=1+read(e);
    fo(i,0,er[n+1]-1)
    {
        q=0;
        fod(j,n,1)if(er[j]&i)q=j;
        else zx[i][j-1]=q;
    }
    f[0][n][0]=1;
    fo(i,1,m)
    {
        register int I=i&1,q;
        fo(j,0,er[n+1]-1)f[I][0][j]=f[!I][n][j],f[!I][n][j]=0;
        fo(j,0,n-1)
        {
            fo(k,0,er[n+1]-1)if(f[I][j][k])
            {
                if(!a[i][j+1]||a[i][j+1]-1==((k&er[j+1])>>j))((f[I][j+1][k]+=f[I][j][k])>=mo?f[I][j+1][k]-=mo:0);
                if(!(k&er[j+1])&&a[i][j+1]!=1)
                {
                    q=k+er[j+1]-er[zx[k][j]];
                    ((f[I][j+1][q]+=f[I][j][k])>=mo?f[I][j+1][q]-=mo:0);
                }
                f[I][j][k]=0;
            }
        }
    }
    fo(i,0,er[n+1]-1)((ans+=f[m&1][n][i])>=mo?ans-=mo:0);
    printf("%d\n",ans);
    return 0;
}
MATLAB数据可视化:pcolor函数从入门到精通(附colormap调色秘籍) 本文深入解析MATLAB中pcolor函数的数据可视化应用,从核心机制、坐标网格指定到常见陷阱规避。重点揭秘colormap调色秘籍,涵盖内置色系选用原则、个性化定制方法及高级渲染技巧,助你创作出信息准确、视觉出色的专业图表,精通从数据到出版级图表的全流程。 阅读详情

相关推荐

告别手动维护!教你用SAP BAPI批量更新生产订单BOM组件(CO02工单)

本文详细介绍了如何利用SAP BAPI实现生产订单BOM组件的批量更新,解决传统手工操作(如CO02工单)效率低下的问题。通过核心函数解析和批量处理框架设计,帮助用户大幅提升工作效率,降低错误率,适用于物料主数据变更、季节性配方调整等场景。

weixin_30844577的博客 561

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig与zag/左右双旋/3+4重构)

冰糖雪梨的学习笔记 1849

2023-12-26~2025-07-04备份

一、海康视觉与汇川机器人 服务器-客户端通信设置IP在同一网段名称IP端口类型海康相机工控机7930服务器机器人3000客户端海康VM服务器设置1通信管理 增添TCP服务端,设置本机IP:192.168.0.20,端口号79302 协议解析 通信双方约定通信格式(设置收发数据格式,分隔符)机器人客户端设置(不同类型机器人设置有差别)1 通讯服务设置 设置连接服务器IP、服务端端口号、机器人端口号,确保连接正常2 协议解析 使用指令代码构建通讯解析。

青铜小码农 3126

【AGC017 F】Zigzag

Description 给出一个类似杨辉三角的三角形,要求在上边选出m条走n步的路径,并满足: 每条路径只能往左下/右下走,; 第i+1条路径必须在第i条路径的右侧(可以重合); 在给出一些要求,规定第x条路径的第y步一定往左下/右下走。 n,m≤20n , m \leq 20n,m≤20 Solution 首先转化一下题意,一条路径可以由一个01序列表示,那么要满足的要求就是: 1.前一个序...

Demon_Rieman的博客 613

VS2022离线环境下的NuGet包管理:从本地源到依赖项全解析

本文详细解析了在VS2022离线环境下如何高效管理NuGet包,包括搭建本地NuGet源的两种方案(本地文件夹源和私有NuGet服务器)、获取离线包的三大渠道以及依赖项处理的实战技巧。通过自动化脚本和依赖树分析工具,帮助开发者解决离线环境中的依赖项黑洞问题,提升开发效率。

5f4d3s2a1q的博客 1060

Aurora 8B/10B IP核介绍 —— Xilinx 技术文档Pg046

一、概述该IP核与用户接口之间支持AXI4-Stream协议,且基于ZYNQ SOC、A7、K7、V7以及UltraScale、UltraScale+系列FPGA的高速收发器(the high-speed serial transceivers)进行实现。多达 16 个连续绑定4 个连续绑定的 GTP 收发器framingstreaming以及全双工或单工加扰消扰CRC校验热插拔Aurora 8B/10B核心(图1-1)是一种可扩展的、轻量级的、用于高速串行通信的链路层协议;

qq_32147275的博客 1640

[agc017f]Zigzag

前言DP题,我当然不会啦。题目大意请你找到m个n位二进制数,对于相邻两个,i+1的前j位的和不小于i的前j位的和。 此外还有对于某个二进制数某位必须是几的若干个限制。DP很容易想到设dp[i,s]表示做到第i个二进制数第i个是s,每次枚举前一个,复杂度很大。 转移复杂度太大了,我们来尝试优化。 如果可以不用枚举前一个就好了。 那么不如让前一个对着当前的改变吧! 设dp[i,j,s]表示做到

不来也不去的一只失忆蝴蝶 678

【QT】QtCreator卸载与安装(非正常状态)

QtCreator卸载与安装(非正常状态)

Cappuccino Blog 1万+

【AGC017F】Zigzag(状压DP)

Description 有一个nnn层的三角形,如图所示: 从顶端开始,每次可以选择向左下走或者向后下走,一直到达底端,形成一条路线。 问有多少种方案画mmm条线路满足: - mmm条线路可以重合但是不能交叉 - 给出kkk条限制,每条限制形如:Ai,Bi,CiAi,Bi,CiA_i,B_i,C_i,表示第AiAiA_i条路线的第BiBiB_i步只能向CiCiC_i方向走。 ...

დ♂Hany01's Blog Space♂ღ 339

Mamba-ST实战:用状态空间模型实现艺术风格迁移的5个关键步骤

本文详细介绍了如何使用Mamba-ST状态空间模型实现高效的艺术风格迁移,涵盖环境配置、数据预处理、模型架构、训练策略和推理优化等5个关键步骤。Mamba-ST基于SSM(状态空间模型)构建,在保持生成质量的同时显著降低计算复杂度,为风格迁移领域提供了新的解决方案。

weixin_29163581的博客 354

Coverity本地增量C/C++代码检查(Linux)操作简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

1482

【AGC017 F】ZigZag

Description 有一个n行的三角形,第i行有i个格子。第i行第j个格子用(i,j)表示。从(i,j)可以到达(i+1,j)和(i+1,j+1)。现在要确定m条从(1,1)出发到第n行的路径。设第a条路径走到的第b个格子是(b,X[a,b]),对于任意a &lt; b,不能存在i,使得X[a,i]&gt;X[b,i]。同时还有K条形如(a,b,c)的限制,表示第a条路径第b个点到第b+1个...

LYD729 416

停车位检测:基于YOLOv5与UI界面的实现

YOLOv5是YOLO(You Only Look Once)系列中的最新版本,它能够在单次前向传播中同时完成多个目标的定位与分类,因此被广泛应用于实时目标检测任务。与之前的版本相比,YOLOv5在精度和速度上得到了很大的优化,适合嵌入到实际的自动驾驶和智能交通系统中。YOLOv5使用了卷积神经网络(CNN)进行特征提取,并通过回归方法预测边界框、类别及置信度。高效的推理速度:YOLOv5采用了优化的模型结构,能够在保证精度的同时提供较快的推理速度。较高的精度。

YOLO 694

[AtCoder Grand Contest 017] F: Zigzag (agc017F)

原题链接 https://agc017.contest.atcoder.jp/tasks/agc017_f Description 给出一个N行的三角形,第i行有i个点 在(X,Y)这个点,可以走向(X+1,Y),也可以走向(X+1,Y+1) 现在需要找出M条路径,这M条路径不能交叉,即第i条路径的所到的每一个点的都必须在第i-1条路径同一行到达的点的右边(可以相同) 同时给出K条...

Never give in. 373

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

AtCoder Grand Contest 017 F - Zigzag

题目传送门:https://agc017.contest.atcoder.jp/tasks/agc017_f 题目大意: 找出\(m\)个长度为\(n\)的二进制数,定义两个二进制数的大小关系如下:若\(a<b\),则设\(a_i\)表示\(a\)的二进制下第\(i\)位(从左往右)的数,有\(a_i\leqslant b_i,i\in[1,n]\) 现需要满足每个二进制数需要小于其之后的二...

weixin_30325793的博客 110

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

AtCoder Grand Contest 017 F - Zigzag 状压dp

题意 给出n和m,求有多少个m位二进制数,满足对于任意相邻的两个,都有i+1的前j位的和不小于i的前j位的和。此外有若干个二进制位上的数已经被确定。 n,m 分析 很容易想到可以设f[i,s]表示第i个数为s时的方案,转移则需要枚举下一位是什么。 这样子显然会超时,考虑如何优化。 既然不能枚举下一个,那就考虑这一个数和上一个数一起改变好了。 设f[i,j,s]表示做到第i个二进制

beginend 370

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【AtCoder】AGC017

A - Biscuits dp[i][0/1]表示当前和是偶数还是奇数,直接转移即可 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define spac...

weixin_30493401的博客 168

【Atcoder】AGC017 C-F简要题解

C.模型转化 E.图论 F.巧妙DP

远行客 396

Atcoder2134 Zigzag MST

问题描述 We have a graph with N vertices, numbered 0 through N−1. Edges are yet to be added. We will process Q queries to add edges. In the i-th (1≦i≦Q) query, three integers Ai,Bi and *C**i* will be give...

weixin_30756499的博客 140

AtCoder Grand Contest 017 迟到记

晚上去操场上浪。 回来以后看到好几个人开着 \(AtCoder\) 在打代码。 。。。 。。。 今天有 \(AtCoder\) 比赛 ? 管它呢, \(Kito\) 在切西瓜,先吃西瓜。。。 然后看 \(ztc \text{ 和 } gls\) 打比赛打得很开心的样子。 然后我就注册了进去看了眼题,,然后不想写。。 ... ... dalao 们谁能告诉我开了比赛看了题不打的话掉不掉Rating...

weixin_30559481的博客 88

agc017f

题目大意 现在你要写出m个长度为n的二进制序列,有一些形如“第i个的第j位必须为x”的限制 对于后面的二进制要&gt;=前面的任意一个二进制 题解 每一个二进制只和和前面的一个二进制有关系,所以有一个很暴力的做法,就是状压前面的一个二进制然后枚举当前的二进制再判断是否合法,这样是22n22n2^{2n}级别的 如何更进一步 我们考虑从本质上思考如何判断两个二进制哪一个大哪一个小 前面...

Marcus 388

agc017f ZigZag

Description给出n*(n+1)/2个点,以三角形排列,每个点和其左下以及右下的点相邻。 需要找出m条路径,每条路径都必须在前一条路径的右边。 有一些规定,第i条路径的第j个位置必须向左/向右走 求方案数 n,m<=20Solutoin题目转化:求m个n-1位二进制数,使得每个二进制数的每一位的前缀和都>=前一个二进制数这一位的前缀和。 直接Dp的复杂度过高,我们考虑优化。 考虑

时光真疯狂, 我一路执迷于匆忙. 484

[agc017F]Zigzag

题目大意有一个n行的三角形,第i行有i个格子。第i行第j个格子用(i,j)表示。从(i,j)可以到达(i+1,j)和(i+1,j+1)。现在要确定m条从(1,1)出发到第n行的路径。设第a条路径走到的第b个格子是(b,X[a,b]),对于任意a < b,不能存在i,使得X[a,i]>X[b,i]。同时还有K条形如(a,b,c)的限制,表示第a条路径第b个点到第b+1个点必须往方向c走。 求合法的方

WorldWide_D的博客 1026

AGC017 F - Zigzag

传送门 Time limit : 4sec / Memory limit : 256MB Score : 1600 points Problem Statement There are N(N+1)⁄2 dots arranged to form an equilateral triangle whose sides consist of N dots, as shown belo...

weixin_34389926的博客 147
上一篇: 【AtCoder】【AGC019F】Yes or No
下一篇: 【AtCoder】【AGC013D】Piling Up
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值