首页 > 其他分享 >【题解】「AGC013D」Piling Up

【题解】「AGC013D」Piling Up

时间:2022-10-05 23:11:27浏览次数:95  
标签:AGC013D ch int 题解 Up 黑球 solve ans inc

传送门

题目大意:

开始有 \(n\) 个黑白球在袋子中,但是不知道具体多少黑球白球,有 \(m\) 次操作,每次从袋子中先拿一个球,再放入一个黑球一个白球,再拿走一个球,求所有初始情况下不同的拿出球的颜色序列的个数,模 \(10^9+7\)。

\(n, m\le 3000\)

题解:

联考的 \(T1\)这tmd是CSP模拟,赛时发现是 \(3000+\) 就直接润了,赛后发现好像不难。

可以发现总是有 \(n\) 个球未被拿走的,设 \(f_{i, j}\) 表示操作了 \(i\) 次,袋中剩下 \(j\) 个黑球。

初值直接 \(f_{0,0\sim n} = 1\),直接 \(dp\)。

然后你发现这样 \(dp\) 会算重,所以我们随机调题需要钦定一种方案最少要有一个时刻袋中没有黑球,这样就不会算重了。

我们也可以计算 \(solve (n, m) - solve (n-1, m)\) 的值,这个与上面等效,即黑球数 \(\ge 0\) 的方案数 \(-\) 黑球数 \(\ge 1\) 的方案数,这个也就是至少一次黑球数 \(= 0\) 的方案数。

Code
#include <bits/stdc++.h>
#define FOR(i,j,k) for(int i=j; i<=k; ++i)
#define ROF(i,j,k) for(int i=j; i>=k; --i)
inline int read (void) {
  int x = 0, f = 1, ch = getchar();
  while(!isdigit(ch)) { if(ch == '-') f = -f; ch = getchar(); }
  while(isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); }
  return x * f;
}
const int maxn = 3005;
const int p = 1000000007;
int f[maxn][maxn];
inline void inc (int &x, int y) { (x += y) >= p ? x -= p : x; }
inline int solve (int n, int m) {
  if(n < 0) return 0;
  memset(f, 0, sizeof(f));
  FOR(i,0,n) f[0][i] = 1;
  FOR(i,0,m-1) FOR(j,0,n) {
    if(j) {
      inc (f[i+1][j-1], f[i][j]);
      inc (f[i+1][j], f[i][j]);
    }
    if(j != n) {
      inc (f[i+1][j], f[i][j]);
      inc (f[i+1][j+1], f[i][j]);
    }
  }
  int ans = 0;
  FOR(i,0,n) inc (ans, f[m][i]);
  return ans;
}
int main (void) {
  int n = read(), m = read();
  int ans = (solve (n, m) - solve (n-1, m) + p) % p;
  printf("%d\n", ans);
  return 0;
}

标签:AGC013D,ch,int,题解,Up,黑球,solve,ans,inc
From: https://www.cnblogs.com/Vomedakth/p/16756725.html

相关文章

  • 完蛋,公司被一条 update 语句干趴了!
    大家好,我是小林。昨晚在群划水的时候,看到有位读者说了这么一件事。大概就是,在线上执行一条update语句修改数据库数据的时候,where条件没有带上索引,导致业务直接崩......
  • BUPT 2022 Autumn Training #5
    题目链接:https://vjudge.net/contest/519146B-BestRelayTeam水题。D-DistinctiveCharacter题意给n(n<=100000)个长为k(k<=20)的01串,定义两个01串的相似度为相......
  • 【whk】三调生物-缝合小鼠实验——小鼠肥胖原因 题解
    今天生物考试考了个小鼠肥胖原因的题,写个题解((我根据一位不愿意透露姓名的刘佳兴的描述扒下来了一道似乎很类似的题\((1)\)首先开第一问。他给定了限制是两种原因之一,......
  • CF1739 部分题解
    比赛链接:https://codeforces.com/contest/1739AB水题//bySkyRainWind#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<algo......
  • 高级vue setup 中provide和inject用法
    父组件<script>import{computed,provide,watch}from'vue'import{ref,reactive,toRefs}from'vue'importfatherfrom'./components/father.vue'exportdef......
  • luogu P3571 [POI2014]SUP-Supercomputer
    题面传送门感觉考场上不一定做得出来的题目?首先我们可以得到每个点的深度,然后猜测这个只和每个层的深度有关。我们考虑这样一个贪心:对于每一层的每个点,如果这个点有子节......
  • Disruptor 红宝书:大厂必备,高端必备
    封面目录第1章:前置知识伪共享原理与实操第2章:Disruptor的使用实战第3章:Disruptor的使用场景分析第4章:架构师视角,深入Disruptor源码分析领取方式具体请咨询......
  • CF1707B题解
    原题CF1707BDifferenceArray思路概述题意分析给定一个长度为\(n\)的序列\(\{a\}\)。每次执行以下操作对序列\(\{a\}\)进行差分,得到差分序列\(b_i=a_{i+1}-a......
  • 高级vue 组合api setup watch监听用法
    <script>import{computed,watch}from'vue';import{ref,reactive,toRefs}from'vue'exportdefault{  setup(){   letdata=reactive({   ......
  • 高级vue 组合api setup computed 用法
    <script>import{computed}from'@vue/reactivity';import{ref,reactive,toRefs}from'vue'exportdefault{  setup(){   letdata=reactive({  ......