0%

tea-0130

114514

02.03 ARC 119C

连续两个数字同时+1/-1

  • 需要反映到一些”不变量”上去
  • 一个数组的奇数和 和 偶数和的相对大小是不变的!
  • 交错和之差不变

统计子数组和为K的数量的算法

  • 前缀和+hashtable 是已知的

交错和相等的子数组就是答案 => 奇数乘以+1,偶数乘以-1,得到的子数组和恰好为0 =>转化成子数组和为0的问题 => 容易解决


其他记录:

ABC 288D

前缀类型套路+思维题

ABC 288E

给定一组需要买的物品B1,B2,…BK

如何安排一个最好的顺序去买这K个物品,花费最少

当你买$B_i$时, 如果之前你已经买了$B_1,B_2,…,B_{i-1}$中的$x$件物品
那么第$B_i$实际上对应第$B_i - x$个没有被售出的商品

  • 买$B_i$花费$A_{B_i} + C_{B_i - x}$

由于$x$属于$0$到$i - 1$ 所以花费至少是$A_{B_i} + cost(B_i, i-1)$

$cost(i,j) = min{C_{i-j},…, C_{i-2},C_{i-1}, C_{i} }$

买所有的物品花费总和 至少需要 $\sum_{i=1}^k (A_{B_i} + cost(B_i, i-1))$

证明这个下界是可以取到的

当你想要买物品$i$的时候, 取决于之前买了多少物品,记作$j$件
那么买的代价就是$A_i + cost(i,j)$

所以可以列出这个状态

$dp[i][j]$表示 前$i$个物品中, 买了$j$个物品的最小代价

$dp[i+1][j+1] <- min{dp[i+1][j+1], dp[i][j]+cost(i+1,j) }$
$dp[i+1][j] <- min{dp[i+1][j], dp[i][j]}$

通过预处理$cost(i,j)$我们可以通过一个$n^2$的dp解决问题


ABC 288F

给你一个数字组成的字符串X,长度为N, 保证没有0

考虑一个${1,2,3,..,N-1}$的一个子集$S$

定义$f(S)$等于 断开$S$中对应位置后

剩余数字字符串得到的乘积

问这个和是多少?

例如

234

2 | 34
2 | 3 | 4
23 | 4
234

容易得到的一个dp方法:
$dp_j = \sum_{i=0}^{j-1} dp_i * X[i+1:j], \forall i < j$

然后可以发现喜提TLE(太慢了 N2)

如何优化这个dp的转移?
$dp_j = dp$

注意到$X[i:j] = 10X[i:j-1] + X[j]$

$$
dp_j = \sum_{i=0}^{j-1} dp_i * X[i+1:j]
= \sum_{i=0}^{j-1} dp_i * (10X[i+1:j-1] + X[j:j])
= 10dp_{j-1} + X[j:j] \sum_{i=0}^{j-1} dp_i
$$

可以发现变成了一个递推+前缀和的形式 于是就可以简化计算到$O(N)$