首页 > 代码库 > 提高组模拟赛总结(2)

提高组模拟赛总结(2)

T1:

题意:给定一个01背包,求将背包装到不能再放任何剩余物品的方案数

做法:部分分 F[j][k]表示前i个物品分配j空间,最小没有使用的物品为k的方案数 F[j][k] = Max(F[j-w[i]][k] + a[i], F[j][k])

实际上并不需要枚举k,显然物品越重其前面必选的物品就越多,能提供的决策就越少,考虑对物品从大到小排序,此时如果取了第i个物品,i+1 .. n必然要被选择到,如果此时剩下的钱刚好放不下i且放得下 i - 1,那就说明 i 就是没有使用的最小的物品,可以更新答案,奥妙zhonzhon

T2:

考试的时候zzy发了个QQ和我说是DD题,我一开始没有想出来,后来发现就是写个暴力,跑个表,然后找规律就A了,没什么意义我就不写了,貌似最后的规律是 n-m+1/n+1

T3:

数位DP什么的最不擅长了,这种东西知道他是数位DP就是推不出来,于是我就放solution吧,什么时候再学习一个

首先问题变成f(b)-f(a-1)
所以只考虑f(R)
如果一个门票的位数小于R
可以从高位往低位开始考虑,如果当前这一位填的数小于原位置的数那么后面填法任意。
如果总位数为奇数,中间一位同样考虑。
考虑后半部分,同样考虑,如果当前这一位的数跟前面对应的数字已经相同,后面的位数就
不需要考虑了。
比如12341421,
考虑到倒数第2位的时候,因为和第2位相等,所以前缀为1234142的数是不可能成为lucky number
的。
这样算,复杂度大约为位数的平方。

提高组模拟赛总结(2)