首页 > 其他分享 >ABC274D题解

ABC274D题解

时间:2022-10-23 15:24:55浏览次数:55  
标签:ABC274D 纵坐标 dpb dpa 题解 cases

这是一道较为简单的可行性DP。

首先看到题目,很容易想到将横纵坐标一起进行处理,但显然时间会炸飞。

所以我们将横纵坐标拆开分别处理,那么就有如下状态:

\(dpa_{i,j}\) 表示在所有竖直移动的操作中,进行到第 \(i\) 个时能否到达 \(j\)。

\(dpb_{i,j}\) 表示在所有水平移动的操作中,进行到第 \(i\) 个时能否到达 \(j\)。

那么转移方程很显然:

\[\begin{cases}dpa_{i,j}=dpa_{i-1,j-a_i}|dpa_{i-1,j+a_i}\\dpb_{i,j}=dpb_{i-1,j-a_i}|dpb_{i-1,j+a_i}\end{cases} \]

然后就做完了。

Code

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e4+5;

// char buf[1<<21],*p1=buf,*p2=buf;
// #define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){ if(ch=='-') f=-1; ch=getchar(); }
    while(isdigit(ch))
        x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return x*f;
}

int n,x,y;
int a[MAXN],b[MAXN];
int cnta,cntb;
int dpa[2005][20005],dpb[2005][20005];

int main()
{
    n=read(),x=read()+10000,y=read()+10000;
    for(int i=1;i<=n;i++)
    {
        int x=read();
        if(i%2==0) a[++cnta]=x;
        else b[++cntb]=x;
    }
    dpa[0][10000]=true;
    for(int i=1;i<=cnta;i++)
        for(int j=a[i];j<=20000;j++)
            dpa[i][j]=dpa[i-1][j-a[i]]|dpa[i-1][j+a[i]];
    dpb[1][b[1]+10000]=true;
    for(int i=2;i<=cntb;i++)
        for(int j=b[i];j<=20000;j++)
            dpb[i][j]=dpb[i-1][j-b[i]]|dpb[i-1][j+b[i]];
    if(dpa[cnta][y] && dpb[cntb][x]) printf("Yes\n");
    else printf("No\n");
    return 0;
}

标签:ABC274D,纵坐标,dpb,dpa,题解,cases
From: https://www.cnblogs.com/yhx-error/p/16818610.html

相关文章

  • Ubuntu20.04运行wiki.js服务器出错问题解决方法
    错误代码:root@xxx:/home/xxxxx/wiki#nodeserverLoadingconfigurationfrom/home/xxxxx/wiki/config.yml...OK2022-10-23T05:00:25.563Z[MASTER]info:============......
  • ABC274G题解
    这是一个比较经典的网络流的建模。首先我们可以横着和竖着给原图编两遍号,能够一次照到的编号相同。以样例一为例:....#....先横着编号:1112#3444再......
  • ABC274C题解
    直接扫一遍,统计即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintMAXN=2e5+5;//charbuf[1<<21],*p1=buf,*p2=buf;//#definegetchar(......
  • Atcoder Regular Round #151 B题 A < AP 题解
    题意:给定一个排列\(p\),求满足下列条件的\(a\)数组的数量。\(1\lea_i\lem\)。\(a\)数组的字典序小于\(\{a_{p_1},a_{p_2},\cdots,a_{p_n}\}\)。题解:由于每......
  • luogu P8585 球状精灵的传说 题解
    题目大意给定\(n\)个精灵的三维幅度\(\{r_{1,i},r_{2,i},r_{3,i}\}\),任意两个精灵若在三个幅度中有两个相同(这里可以乱序)则可以将剩下的一位相加组合起来。组合过的精......
  • 洛谷P5020题解
    原题P5020[NOIP2018提高组]货币系统思路概述题意分析给定包含一个整数\(n\)和一个正整数集合\(a\)的货币系统\((n,a)\),要求将其化简,输出最简的货币系统中的面......
  • P4679 题解
    前言题目传送门!更好的阅读体验?大力树剖!做树剖时,大家可以膜拜@liruiduan2巨佬,他可以在考场上码200行的树剖题目。思路代码有点长。可以用这份代码对拍。/*树剖......
  • P2218 题解
    前言题目传送门!更好的阅读体验?二分答案套搜索。思路答案显然具有单调性,于是可以二分答案。问题是如何实现\(\operatorname{check}(k)\)函数(\(k\)指薄膜边长)。其......
  • 洛谷P2827题解
    原题P2827[NOIP2016提高组]蚯蚓思路概述题意分析给定整数\(n,m,q,u,v,t\)和一个数列\(\{a\}\),进行\(m\)次操作如下:每次选取其中最大数\(x\)切分为\([px],x......
  • dremio 21 版本之后反射No File System scheme matches 问题解决
    实际属于一个老问题了,整理下,方便使用,主要是我们在使用反射的时候碰到的问题问题如下UnknownFormatConversionException:Conversion='Unknownformat(pdfs)conversio......