摘要:
测试地址:Eat the Trees题目大意:一个N*M的矩形场地,有一些格子不能走,要求走若干条回路使得走过每个格子一次且仅一次,求方案数。做法:一看到棋盘类型的题目和很小的数据范围就想到插头DP。因为题目中要求若干条回路,所以轮廓线状态定义直接和骨牌覆盖问题一样,... 阅读全文
摘要:
测试地址:D-query题目大意:给一个长为N的数列,Q次询问,每次询问一个区间[i,j]内有多少个不同的数。做法:用主席树解决问题,将数列上的数字逐个插入,对于第i次操作,在第i个位置+1并生成一个新的版本,表示在第i个位置新出现一个数,然而要排除重复数字的干扰,我... 阅读全文
摘要:
测试地址:D-query题目大意:给一个长为N的数列,Q次询问,每次询问一个区间[i,j]内有多少个不同的数。做法:用主席树解决问题,将数列上的数字逐个插入,对于第i次操作,在第i个位置+1并生成一个新的版本,表示在第i个位置新出现一个数,然而要排除重复数字的干扰,我... 阅读全文
摘要:
测试地址:换教室做法:设f[i][j][0/1]表示前i个教室选j个申请,其中第i个不申请或申请(最后一个0或1)的最小期望,发现满足动态规划的无后效性原则,再根据和的期望等于期望的和,得到状态转移方程(太长就不在这写了,直接看代码吧),于是用Floyd预处理出两点之... 阅读全文
摘要:
测试地址:换教室做法:设f[i][j][0/1]表示前i个教室选j个申请,其中第i个不申请或申请(最后一个0或1)的最小期望,发现满足动态规划的无后效性原则,再根据和的期望等于期望的和,得到状态转移方程(太长就不在这写了,直接看代码吧),于是用Floyd预处理出两点之... 阅读全文
摘要:
测试地址:Lanterns题目大意:有N个灯和M个开关,每个开关控制若干个灯,开启开关会改变所有其控制的灯的状态,一开始所有灯都不亮,每个开关最多开启一次,问有多少种可能方案使所有灯达到某种状态?做法:经典的求解异或方程组的问题。列N个方程,有M个未知数,组成一个系数... 阅读全文
摘要:
测试地址:Lanterns题目大意:有N个灯和M个开关,每个开关控制若干个灯,开启开关会改变所有其控制的灯的状态,一开始所有灯都不亮,每个开关最多开启一次,问有多少种可能方案使所有灯达到某种状态?做法:经典的求解异或方程组的问题。列N个方程,有M个未知数,组成一个系数... 阅读全文
摘要:
测试地址:排序做法:首先我们知道,如果存在一个长度为k的可行操作序列(就是用了k个操作使原数列排好序),将它操作的顺序随意变换都是一个可行的序列,那么其对答案的贡献为k!。于是我们从小到大搜索操作,当搜索到第i种操作时,表示我们已经处理完前i-1种操作了。将原数列分成... 阅读全文
摘要:
测试地址:排序做法:首先我们知道,如果存在一个长度为k的可行操作序列(就是用了k个操作使原数列排好序),将它操作的顺序随意变换都是一个可行的序列,那么其对答案的贡献为k!。于是我们从小到大搜索操作,当搜索到第i种操作时,表示我们已经处理完前i-1种操作了。将原数列分成... 阅读全文
摘要:
测试地址:星际战争做法:注意到答案具有单调性,答案比某一个点大时都有可行解,比这个点小时都没有可行解,于是可以二分答案,转变为判定性问题:在某一个时间t内能否消灭所有敌人?再看这个题目的模型,注意到在时间t内一个武器最多能够削减(t*攻击速度)个单位的装甲值,我们要做... 阅读全文