[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 ...
随机推荐
- 基于sklearn的集成学习实战
集成学习投票法与bagging 投票法 sklearn提供了VotingRegressor和VotingClassifier两个投票方法.使用模型需要提供一个模型的列表,列表中每个模型采用tuple的 ...
- 关于linux mint更改资源管理器的快捷键
前言 首先要知道 linux mint 的默认资源管理器是 nemo 我很不习惯 ctrl+d 在nemo里面是 收藏到侧边栏 我习惯 ctrl+d 在windows上是删除文件 所以下面我就修改这个 ...
- PGL图学习之项目实践(UniMP算法实现论文节点分类、新冠疫苗项目实战,助力疫情)[系列九]
原项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5100049?contributionType=1 1.图学习技术与应用 图是一个复杂 ...
- python-函数的参数与返回值
Python函数 4.1.函数初识 在编写程序的过程中,有某一功能代码块出现多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数 就是一系列Python语 ...
- 零基础入门数据挖掘——二手车交易价格预测:baseline
零基础入门数据挖掘 - 二手车交易价格预测 赛题理解 比赛要求参赛选手根据给定的数据集,建立模型,二手汽车的交易价格. 赛题以预测二手车的交易价格为任务,数据集报名后可见并可下载,该数据来自某交易平台 ...
- 【Java SE】Day10接口、多态
一.接口 1.概述 是一种引用类型,是方法的集合,内部封装了各种方法 引用类型:数组.类.接口.包装类 2.方法的定义格式 抽象方法:无方法体,子类实现 默认方法: 静态方法:static修饰,可以由 ...
- SAP程序发布流程
更改程序名称 如果你想要更改程序名称的话,首先进入程序,关闭编辑,只显示代码 点击重命名就可以了 或者直接输入事务代码se38进入APAP编辑器,输入程序名称,重命名 为程序创建事务代码 事务代码为s ...
- Day34.2:Calendar详解
Calendar 1.1 概述 Date类中很多方法被Calendar所取代,Calendar类提供了获取和设置各种日历的方法. 1.2 方法 构造方法:Calendar类的构造器被protected ...
- windows下django项目创建流程
一.创建djangoa项目 1.将python39\Scripts 加入系统环境变量. 2.django-admin startproject 项目名称 二.设置setting 1.语言设置zh-ha ...
- Kubernetes环境鉴权与自动发现
概览文章中提到了k8s的鉴权模式,简单回顾下: RBAC: Role-based access control 是基于角色的访问控制 ABAC: Atrribute-based access cont ...