国庆清北Day4 DP 题目

1.数字三角形 和%m最大
f[i][j] 不满足无后效性
发现没有办法DP加一维
bool f[i][j][k] 到(i,j) 和%m存不存在
求答案,枚举k
数字三角形2
2.problem2
每个数选还是不选
f[i][j]前i个数考虑过,%m等于j的方案数
f[i][j]->f[i+1][j]
->f[i+1][(j+a[i+1])%m]
3.problem12
博弈论
f[i][j]表示当x=i,y=j时是必胜还是必败
f[1][i+1]
f[2*i][j]
f[3*i][j]
有一个必败态,f[i][j]必胜态
n^2 9*1e8 MLE
map O(logn) MLE
unordered_map O(1) C++11
x不可能为5
x=2^a*3^b
f[a][b][j] x=2^a*3^b y=j
luogu 3541
problem 5
1~r之间乘积为k有多少个
动态规划的题目,一旦限制多了一个条件-->状态多一个维度
f[i][j][t] 18*2*1e18*10
t不可能等于11
t可能质因子只有2,3,5,7
-->2^a*3^b*5^c*7^d
f[i][j][a][b][c][d]=
0/1 2 3 5 7
枚举下一位填什么,质因数分解, a++.....
一位是0,最后 k不等于0,不能填零
k等于0,再写另外一个数位DP :l,r至少一个0的
仍然TLE
18*2*64*37*25*21*10
不会每一个维度都取到上届
dfs 只有2 3 5 7因子的数找出来, 3w 个数
预处理每个数乘上0~9变成哪个数
bzoj2757 难写 滚动数组
c:
外面和中间
+
中间和中间
外面和外面

能造成欧气加成的玄学值差值不超过1
单独对于(2,2)
f[i][j][k]
代表(2,2)从1选完了i,选了j个作为自己的玄学值,k代表有没有选i这个玄学值
i+1这个玄学值不给(2,2)这个卡包 -> f[i+1][j][0]
->f[i+1][j+1][1]
距离为1,距离为2,自身,的欧气加成
不能,加维
f[i][j22][k22][j23][k23][j32][k32][j33][k33] 各自需不需要i+1的权值
31*1e4*2^4
p103

problem15
所有数都不同:
与排列有关的DP套路:
对读进来n个数排序
对于一个已有的排列,如何加一个数
p1>p2>p3>...>pn
f[i][j]
代表把n个数中前i个数成了一个排列,激动值为j的方案数有多少
转移,把第i+1个数加入这个排列,有i+1个位置 隔板法
产生新的激动,其他的数不激动了,
加在最后不会改变
倒数第二,不会自己激动,不会使别人不激动
放在第一个位置,自己激动,+1
f[i+1][j+1]+=f[i][j]
f[i+1][j]+=f[i][j]*i
重复,自己寻找,加个组合数?????
www.codechef.com

problem6
/*p1>p2>....>pn
f[i+1][j]+=f[i][j]*i
f[i+1][j+i]+=f[i][j]*/***
p1<p2<p3<.....<pn
for k 0->i i+1插入到k
f[i+1][j+i-k]+=f[i][j]
j:n^2 逆序对最多这么多
i:n
k:n
优化:%2等于几 j:2
答案是n!/2
奇排列个数等于偶排列个数
奇排列交换第一第二个数,和所有偶排列一一对应

原文地址:https://www.cnblogs.com/lcan/p/9743242.html