【AtCoder】【AGC013D】Piling Up

news/2024/7/3 4:54:10

Description

你有一堆黑白球和一个盒子,
一开始,盒子里有n个不知道颜色的球,
接下来,你要对盒子进行m次操作:
1. 随机从盒子里取出一个球;
2. 往盒子里放一黑一白俩球;
3. 再随机从盒子里取出一个球;

这样你总共会拿出2m个球,
求拿出的这些球有多少总可能(有序),

Solution

首先,盒子里总会有n个球,
设DP:f[i][j]表示,做了i次操作,剩余的球有j个为黑色的取出方案数,
初始化为f[0][1..n]=1,
转移(0为黑):
00:要求 j>0 j > 0 ,转移到j-1;
01:要求 j>0 j > 0 ,转移到j;
10:要求 j<n j < n ,转移到j;
11:要求 j<n j < n ,转移到j+1;

显然,这样会算重,只要你没有卡住上下界总会算多几次,
发现,算多的部分恰好为n-1时的答案
也就是最后的答案为DP(n,m)-DP(n-1,m)

复杂度: O(nm) O ( n m )

Code

#include <cstdio>
#include <cstring>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int N=3500,mo=1e9+7;
int m,n;
int f[N][N];
int DP(int n,int m)
{
    memset(f,0,sizeof(f));
    fo(i,0,n)f[0][i]=1;
    fo(i,1,m)fo(j,0,n)
    {
        if(j<n)((f[i][j]+=f[i-1][j+1])>=mo?f[i][j]-=mo:0),((f[i][j]+=f[i-1][j])>=mo?f[i][j]-=mo:0);
        if(j)((f[i][j]+=f[i-1][j])>=mo?f[i][j]-=mo:0),((f[i][j]+=f[i-1][j-1])>=mo?f[i][j]-=mo:0);
    }
    int ans=0;
    fo(i,0,n)((ans+=f[m][i])>=mo?ans-=mo:0);
    return ans;
}
int main()
{
    scanf("%d%d",&n,&m);
    printf("%d\n",(DP(n,m)-DP(n-1,m)+mo)%mo);
    return 0;
} 

http://www.niftyadmin.cn/n/2675416.html

相关文章

java 序列化时排除指定属性

java 序列化对象如何排除指定属性呢? java 中序列化对象有多种方式:struts2 ,jackson,json-lib (1)使用struts2 json插件 依赖的jar包:struts2-json-plugin-2.3.15.3.jar,xwork-core-2.3.15.3.jar,当然还有servlet-api.jar 范例: Java代码 private String getMessageJson(Pus…

ASP.NET的视图(Razor)循环产生html代码

需要要视图中Razor语法&#xff0c;循环产生一些html代码。产生后的html是这样的&#xff1a; <li data-transition"fade" data-slotamount"7" data-masterspeed"1500"><img src"~/Content/img/slider-images/XXX1111.jpg" a…

【AtCoder】【AGC009D】Uninity

Description 给出一棵树&#xff0c;要求确认一种点分治策略&#xff0c;使得点分树的深度最小。 Solution 显然&#xff0c;答案的上界为log&#xff08;然并卵&#xff09;。 我们先定义点权&#xff0c;一个点的点权为它在点分树上的深度&#xff0c; 显然&#xff0c;…

西游记人物

package com.hanqi;public class Xiyouji2 {String Name;double Height;String Weapon;void printName(){System.out.println(Name);}void printWeapon(){System.out.println("武器&#xff1a; "Weapon);}public static void main(String[] args){Xiyouji2 XiYouJiR…

Microsoft更新Cosmos DB,提供Cassandra支持,提高可用性保证

在上个月的Connect 2017大会上&#xff0c;Microsoft新发布了多个Azure Cosmos DB更新&#xff0c;其中包括支持使用Cassandra NoSQL数据库的API&#xff0c;以及更高的可用性保证。这样&#xff0c;用户可以在Cosmos DB内使用针对Cassandra NoSQL数据库的API去操作数据模型。此…

【AtCoder】【ARC064F】Rotated Palindromes

Description 求有多少个序列满足以下条件&#xff1a; 1. 序列有n位&#xff1b; 2. 序列的每位为1~m之间的整数&#xff1b; 3. 这个序列经过旋转以后可以变成一个回文串&#xff1b; Solution 这是一个悲惨的故事…..想了一天多&#xff0c;一直在想怎么减掉不合法的&…

网站常见的反爬虫和应对方法

这几天在爬一个网站&#xff0c;网站做了很多反爬虫工作&#xff0c;爬起来有些艰难&#xff0c;花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下。 从功能上来讲&#xff0c;爬虫一般分为数据采集&#xff0c;处理&#xff0c;储存三…

Android系统层Watchdog机制源码分析

一&#xff1a;为什么需要看门狗? Watchdog,初次见到这个词语是在大学的单片机书上, 谈到了看门狗定时器. 在很早以前那个单片机刚发展的时候, 单片机容易受到外界工作影响, 导致自己的程序跑飞, 因此有了看门狗的保护机制, 即:需要每多少时间内都去喂狗, 如果不喂狗, 看门狗将…