首页 > 其他分享 >简单数数

简单数数

时间:2024-01-31 16:36:35浏览次数:22  
标签:10 数数 le int 题面 简单 操作 dp

AGC013D

题面

一开始有 \(n\) 个颜色为黑白的球,但不知道黑白色分别有多少,\(m\) 次操作,每次先拿出一个球,再放入黑白球各一个,再拿出一个球,最后拿出的球按顺序排列会形成一个颜色序列,求颜色序列有多少种。答案对 \(10^9+7\)​ 取模。

思路

首先,我们发现题目并没有给定初始状态,考虑枚举,一看 \(n\le 3000\),直接放弃尝试(在后面求解的转化中也会发现这没有用)。

然后再看到操作,考虑将一次完整的操作拆成三个部分,以操作次数为纵轴、排列中黑球的数量(指长度为 \(n\) 的球的“排列”)为横轴,如下图所示:

img

那么问题就转化为了寻找本质不同的折线(也就是不平行)的种数,为什么呢?显然,如果平行的话,操作就是一样的,那序列肯定相同(实在不理解可以自己画图)。而从同一种排列按照操作转移,可以统计出从一个点开始的所有情况并且不会重复。

于是,我们设计状态 \(f(i,j)\) 表示操作了 \(i\) 次,排列中有 \(j\) 个黑球。而处理平行的情况,就用到了等价类的思想,如果这条折线碰到了下界(黑球的数量为零),我们就将其计入答案。那么状态就改为 \(f(i,j,0/1)\) 表示当前第 \(i\) 次操作,有 \(j\) 个点,有没有碰到下界。最后 \(ans= \sum f(n,i,1)\)。

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=3e3+1;
const int mod=1e9+7;
int n,m,ans;
int dp[maxn][maxn][2];//dp[i][j][1/0]表示第i次操作,有j个球,以及是否碰到过零 
signed main()
{
	std::ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;++i)dp[0][i][0]=1;
	dp[0][0][1]=1;
	for(int i=0;i<m;++i)//操作 
	{
		for(int j=0;j<=n;++j)//黑棋数 
		{
			dp[i][j][1]%=mod;
			dp[i][j][0]%=mod;
			if(j>=1)
			{
				if(j==1)//可以碰到下界 
				{
					dp[i+1][j-1][1]+=dp[i][j][0];//拿走一个 
					dp[i+1][j][1]+=dp[i][j][0];//原封不动 
				}
				else//碰不到一点 
				{
					dp[i+1][j-1][0]+=dp[i][j][0]; 
					dp[i+1][j][0]+=dp[i][j][0];
				}
				dp[i+1][j-1][1]+=dp[i][j][1];//以前 
				dp[i+1][j][1]+=dp[i][j][1];//碰到过 
			}
			if(j+1<=n)//可以放一个
			{
				dp[i+1][j+1][1]+=dp[i][j][1];
				dp[i+1][j][1]+=dp[i][j][1];
				dp[i+1][j+1][0]+=dp[i][j][0];
				dp[i+1][j][0]+=dp[i][j][0];
			}
		}
	}
	for(int i=0;i<=n;++i)
		ans=(ans+dp[m][i][1])%mod;
	cout<<ans<<endl;
	return 0;
}

不定方程解数计算

题面

有不定方程 \(X_1,X_2+...+X_n=S\),每个量都是非负整数,对于每个 \(X_i\),有限制 \(X_i\le K\),计数这样的不定方程的解数(\(n\le 10^5,K\le10^5\))

思路

不好直接做,考虑容斥。枚举至少有几个大于 \(K\),\(S\) 变成 \(S-K\times i\),转化为没有限制的问题,然后就是插板法

CCPC2023秦皇岛热身赛B

CF1895F

AGC013E

CSA

题面

给定一棵树,求有多少个排列 \(p_1,p_2,p_3,...p_n\) 满足:\(p_1,p_2...p_n\) 的任意一个前缀 \(p_1,p _2...p_i\) 在树上是联通的

树的大小 \(n\le 10^6\)​

思路

ARC101E

LIS

题面

求有多少个长度为 \(n\) 的序列,元素都是 \([1,m]\) 的整数,LIS 长度为 \(k\) (LIS 是严格的)

\(n\le 1000,m\le 10\)​

CF1909F2

CF156D

AGC030D

NOI2015寿司晚宴

标签:10,数数,le,int,题面,简单,操作,dp
From: https://www.cnblogs.com/PenguinChen/p/17999515

相关文章

  • 简单数数
    AGC013D最大的问题是初始状态你不知道,怎么样数两两不平移的折线?考虑只数刚好碰到过边界的折线,就做完了。这提示我们找一个代表元。不定方程解计数先钦定\(f_{i}\)表示至少有\(i\)个盒子放了\(k\)个球,然后找\(i+1\)个盒子先放\(k+1\)个球,剩下的随便放插板技术,最后......
  • fpmarkets实例讲解止损,控制风险如此简单
    止损和止盈是交易者在交易时都需要了解的两个基本设置,在上篇文章fpmarkets澳福和各位投资者分享了止盈如何工作,今天我们继续实例讲解止损,在交易中控制不必要的风险。止损单是基本交易订单之一。如果市场走向与预期相反,它会限制损失。事实上,它是止盈的反义词。止盈为利润设定限额,止......
  • 字库的简单学习
    字库的简单学习什么是字库字库就是字型库(FONTLIBRARY),其实计算机上显示的每个字符(不管它是哪种语言的),都是一个小的图案。字库就是把这些小的图案以图片的某种形式保存起来,需要显示的时候还原出来就可以了。在WINDOWS操作系统里的字库存放在系统盘windows/fonts文件夹下,在......
  • `glob`和`fnmatch`都是Python的内置模块,用于文件名的匹配,但它们的功能和使用场景有所
    `glob`和`fnmatch`都是Python的内置模块,用于文件名的匹配,但它们的功能和使用场景有所不同²。1.**fnmatch**:`fnmatch`模块提供了一种简单的方式来匹配Unixshell风格的模式,如`*.py`,`Dat[0-9]*`,`Dat[!0-9]*`等²。它只是将一个文件名与模式进行比较,返回True或False²。例如,......
  • [word] Word排版原来这么简单,两招教你做出精美的word文档
    说到word排版,我们常常就会想到论文的排版,制作目录,不同页眉页脚如何设置。今天我们来说两个不一样的word排版技巧,让你的word文档更加精美。1、word对齐技巧说到对齐的问题,一般都是采用强行对齐的方式——狂按空格键。今天我们来看点有技术含量的。用制表符来进行对齐。先输入文本内......
  • 【10秒开服】幻兽帕鲁全自动部署教程,难道你还想手动搭建游戏服务器吗?快来学习这个简单
    在帕鲁的世界,你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活,也可以为你在工厂工作。你也可以将它们进行售卖,或肢解后食用。引用自:https://store.steampowered.com/app/1623730/Palworld目前......
  • iptables 简单命令
    禁止与指定IP的主机进行连接iptables-IINPUT-s10.0.28.15-jDROP解除与指定IP的主机进行连接iptables-DINPUT-s10.0.28.15-jDROP禁止与指定IP段地址段的主机进行连接iptables-IINPUT-s10.0.28.15/24-jDROP禁止与指定IP和端口的主机进行连......
  • burpsuite抓取修改http和https流量(proxy模块的简单应用)
    一、操作环境目标机:DVWA网站操作机:BurpSuite Prov2.1;FireFox浏览器二、操作步骤1.设置BP代理服务端口代理--选项--监听器(选项卡) 为什么不用8080?因为Tomcat默认端口和BP的默认监听端口一致,同时打开会导致端口冲突。2.设置Fir......
  • 最简单的centos搭建frp内网穿透
    最简单的centos搭建frp内网穿透 https://www.cnblogs.com/phpwyl/p/16466531.html首先服务端搭建1.进入软件安装目录cd/usr/local/src2.下载frp版本可以自己选择,如果下载慢,可以直接通过浏览器或挂代理下载wgethttps://github.com/fatedier/frp/releases/download/v......
  • 【译】命名变得简单:AI 支持的重命名建议
    您是否曾经为命名一个变量、方法或类而挣扎过?找到表达性和简洁性之间的完美平衡了吗?您并不孤单。我们通过GitHubCopilotChat扩展(需要订阅)在最新的VisualStudio预览版中解决了这个普遍的挑战。人工智能支持的重命名建议,这个功能不只是建议名字;它了解您的标识符是如何使......