比赛链接
https://codeforces.com/contest/1555
1. A. PizzaForces
1.1. 题意
6元15个物品,8元20个物品,10元25个物品
现在需要买至少n个物品,问需要多少钱
1.2. 做法
首先看单价,发现他们都相同,然后就是尽量不要多买了。
如果n比15,20,25的最小公倍数的两倍还要大,则多出的这一部分,可以考虑直接购买6元的,剩下的小范围dp即可
核心思想: 大范围贪心,小范围dp
notes: 注意一定是至少两倍以上才能贪心
https://codeforces.com/contest/1555
6元15个物品,8元20个物品,10元25个物品
现在需要买至少n个物品,问需要多少钱
首先看单价,发现他们都相同,然后就是尽量不要多买了。
如果n比15,20,25的最小公倍数的两倍还要大,则多出的这一部分,可以考虑直接购买6元的,剩下的小范围dp即可
核心思想: 大范围贪心,小范围dp
notes: 注意一定是至少两倍以上才能贪心
https://codeforces.com/contest/1551
给你一个数n,你要把他拆为$c_1+2c_2$的形式,你需要最小化$c_1$和$c_2$的差
对模3的余数进行分类讨论
1 |
|
VK Cup 2021 - Elimination (Engine)
给你一个十进制数,你要把它拆成多个只由0和1组成的十进制数之和,问最少拆几个。
答案就是十进制数每个位上的数中的最大值
1 |
|
你需要计算有多少对满足长度为n的排列$p$和$q$,满足$p$字典序>$q$ 且 $inv(p)<inv(q)$,答案取模
$inv$ 为逆序对个数
设$f(i,j)$为长度为$i$、逆序对个数为$j$的排列的个数 , 考虑第一个数字为$t$
$f(i,j) = \sum_{t \in [1,i]} f(i-1,j-t+1)$
一个填$u$,另一个填$v$ $u<v$
$$
\begin{aligned}
ans[i] \&= i * ans[i-1] + \sum_{1<=u<v<=i, x+u>y+v} f(i-1,x)\cdot f(i-1,y)
\&= i * ans[i-1] + \sum_{x-y>v-u, 1<=u<v<=i} f(i-1,x)\cdot f(i-1,y)
\&= i * ans[i-1] + \sum_{x-y>d, 1<=d<i} (i-d)*f(i-1,x)\cdot f(i-1,y)
\&= i * ans[i-1] + \sum_{x,y} f(i-1,x)\cdot f(i-1,y) \cdot \sum_{x-y>d, 1<=d<i} (i-d)
\end{aligned}
$$