[ARC107D] Number of Multisets
\(\text{Solution}\)
学习到了一些 \(dp\) 的 \(trick\)
设 \(f_{i,j}\) 表示用了 \(i\) 的元素,当前和为 \(j\) 的方案数
\(dp\) 有两样不好处理的东西
第一是当前和不一定为整数
第二是可重集合的重复计数问题
关于问题二的解决只需钦定加数大小顺序即可
这个显然不能再多设一维,考虑目前集合元素顺序从大到小,那么每次在最前面加入 \(1\),不改变相对大小
分数可以由 \(1\) 除以若干次 \(2\) 得到,相当于之前的整体除以 \(2\),整体元素相对顺序仍然不变,这样就不重了
于是转移就分为两种,在最前面加入 \(1\),或者整体除以 \(2\)
这样是可以覆盖所有可能的加数的
想起分拆数的 \(dp\) 转移也是异曲同工之妙,最前面加个 \(1\) 或者整体加 \(1\),相对大小顺序都不变,又可以覆盖所有决策
再记录:昨天收获的 \(trick\),等大环计数,枚举最小值所在环,这样就有大小顺序而不会重复了
\(\text{Code}\)
#include <bits/stdc++.h>
#define IN inline
using namespace std;
const int P = 998244353;
int f[3005][3005];
IN void Add(int &x, int y){if ((x += y) >= P) x -= P;}
int main() {
int n, k; scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++) {
f[i][i] = 1;
for(int j = i - 1; j; j--)
Add(f[i][j], f[i - 1][j - 1]), Add(f[i][j], f[i][j << 1]);
}
printf("%d\n", f[n][k]);
}
[ARC107D] Number of Multisets的更多相关文章
- D - Number of Multisets 题解(思维dp)
题目链接 题目大意 给你一个数k和n,表示用n个\(1/2^i(i=0,1,2.....)\)组成k有多少种方案数 题目思路 这个dp实属巧妙 设\(dp[i][j]表示i个数构成j\) 这i个数可以 ...
- CodeForces - 1097F:Alex and a TV Show (bitset & 莫比乌斯容斥)
Alex decided to try his luck in TV shows. He once went to the quiz named "What's That Word?!&qu ...
- AtCoder Regular Contest 107(VP)
Contest Link Official Editorial 比赛体验良好,网站全程没有挂.题面简洁好评,题目质量好评.对于我这个蒟蒻来说非常合适的一套题目. A. Simple Math Prob ...
- Solution Set -「ARC 107」
「ARC 107A」Simple Math Link. 答案为: \[\frac{a(a+1)\cdot b(b+1)\cdot c(c+1)}{8} \] 「ARC 107B」Quadrup ...
- CodeForces - 981G Magic multisets
假设我们可以对每个位置快速维护一个数组,记录每个位置有哪些值是已经出现了的,哪些值是没有出现的,这样就可以决定修改的时候到底是 *2 还是 +1了. 但是很可惜,并不存在功能这么强大的数组,所以只能另 ...
- JavaScript Math和Number对象
目录 1. Math 对象:数学对象,提供对数据的数学计算.如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法. 2. Number 对象 :Js中提供数字的对象.包含整数.浮 ...
- Harmonic Number(调和级数+欧拉常数)
题意:求f(n)=1/1+1/2+1/3+1/4-1/n (1 ≤ n ≤ 108).,精确到10-8 (原题在文末) 知识点: 调和级数(即f(n))至今没有一个完全正确的公式, ...
- Java 特定规则排序-LeetCode 179 Largest Number
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- Eclipse "Unable to install breakpoint due to missing line number attributes..."
Eclipse 无法找到 该 断点,原因是编译时,字节码改变了,导致eclipse无法读取对应的行了 1.ANT编译的class Eclipse不认,因为eclipse也会编译class.怎么让它们统 ...
- 移除HTML5 input在type="number"时的上下小箭头
/*移除HTML5 input在type="number"时的上下小箭头*/ input::-webkit-outer-spin-button, input::-webkit-in ...
随机推荐
- BrokenPipeError错误和subprocess.run()超时参数在Windows上无效
1.问题的发现 今天,一个在windows上运行良好的python脚本放到linux下报错,提示错误 BrokenPipeError: [Errno 32]Broken pipe.经调查是subp ...
- 《MySQL必知必会》知识汇总一
一.使用MYSQL 展示所有数据库 show databases; 选择数据库 use crashcourse; 展示该数据库中所有的表 show tables; 还可以展示表列的shema约束 sh ...
- python字符串常用方法介绍,基于python3.10
python字符串常用方法-目录: 1.strip().lstrip().rstrip()2.removeprefix().removesuffix()3.replace()4.split().rsp ...
- Kafka教程(二)API开发-生产者、消费者、topic
一.地址 1.实时更新的思维导图 https://www.mubucm.com/doc/4uqlpedefuj 2.图片 二.具体内容 5.producer生产者 demo 发送pro.s ...
- [FCC] Cash Register 计算找零
题目地址: https://chinese.freecodecamp.org/learn/javascript-algorithms-and-data-structures/javascript-al ...
- 制作 Python Docker 镜像的最佳实践
概述 ️Reference: 制作容器镜像的最佳实践 这篇文章是关于制作 Python Docker 容器镜像的最佳实践.(2022 年 12 月更新) 最佳实践的目的一方面是为了减小镜像体积,提升 ...
- adb环境配置及常用命令
一.adb环境配置 1.下载并安装adb驱动 2.下载adb工具platform-tools.rar,解压放在某个文件夹下 3.右击此电脑->属性->高级系统设置->环境变量-> ...
- 微服务系列之服务监控 Prometheus与Grafana
1.为什么需要监控服务 监控服务的所属服务器硬件(如cpu,内存,磁盘I/O等)指标.服务本身的(如gc频率.线程池大小.锁争用情况.请求.响应.自定义业务指标),对于以前的小型单体服务来说,确实 ...
- 8、ThreadPoolTaskExecutor线程并发
一.线程池的优点: 1.降低资源消耗.通过重复利用自己创建的线程降低线程创建和销毁造成的消耗. 2.提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 3.提高线程的可管理性.线程是 ...
- [编程基础] C++多线程入门3-小心地将参数传递给线程
原始C++标准仅支持单线程编程.新的C++标准(称为c++11或c++0x)于2011年发布.在c++11中,引入了新的线程库.因此运行本文程序需要C++至少符合c++11标准. 文章目录 3 小心地 ...