很容易想到类似素数筛选的方法,但是发现空间这个题目开的很小,所以开那么大空间不行
发现d(n) - n < 7 * 9,函数与自身相减是小于63,某个数,最多只会影响它的第63个后面的数,考虑用一个类似滚动数组的hash,如果这个数是,那么就存储,如果这个数不是。就不做
不管怎样都要把后面一个消除影响以及这个数还原为可以的
1 | /* From: Lich_Amnesia |
很容易想到类似素数筛选的方法,但是发现空间这个题目开的很小,所以开那么大空间不行
发现d(n) - n < 7 * 9,函数与自身相减是小于63,某个数,最多只会影响它的第63个后面的数,考虑用一个类似滚动数组的hash,如果这个数是,那么就存储,如果这个数不是。就不做
不管怎样都要把后面一个消除影响以及这个数还原为可以的
1 | /* From: Lich_Amnesia |
1 | /* From: Lich_Amnesia |
用矩阵表示状态的转移
位运算计算下一行的状态
两个能够转化的连接一条边
dp[i][x][y] 表示前i个已经完成匹配并且i+1为x,i+2为y的时候的最小变化次数
因为第i个是肯定要变的,然后后面的两个数的变换次数分别有up >= k >= l (up为i的变化,k为i+1的变换,l为i+2的变换)或者down >= k >= l
1 | /* From: Lich_Amnesia |
画图找规律
f[1] = 2
f[n] = f[n-1] + 1 + f[n-1] + 1 + f[n-1]
f[n] = 3^n - 1 快速幂
1 | #include <iostream> |
做一个映射表第一次出现的位置就行了
1 | #include <iostream> |
1 | #include <iostream> |
想象成一个树,然后有一个递归关系,
1.如果这个点src的子树中有一个含有2号边那就不用管直接return 1表示这个以src为根的子树已经判定完毕
2.如果这个点src正好是叶子节点那么就返回[src][pre]这条边的值,1表示需要修理,并且存下这个src必须得需要它这个点
3.如果这个src的子树中没有含有2号点的证明src下面的树中没有需要修理的。
两种情况:第一个是src和pre这条边是2号边那就return 1,表示这个点src是答案中的。第二个是如果src和pre的是1号边那么就return 0,不需要修理
1 | #include <iostream> |
分成k和n-k的部分,然后算sk/k 和(sall - sk) /(n - k),易知,前面的k个数肯定是比较大的,然后前面k个进行均分sk%k的值在前k中分配且要不能大于r,然后后面的n-k也是一样的只是不能大于a[k]
1 | #include <iostream> |
判定1,2。算一下 有没有可以用的盘子或者碗,然后加减一下就行
1 | #include <iostream> |
找出规律,最后一位对数据的影响只在和最前一位的大小关系上,然后去掉最后一位其他的都是可行的,最后加上1-9。