SRM514 250:考虑这样构造一个答案:先跳一个(1,pace),之后来回跳(-pace,1)和(pace,1),这样,我们发现只要pace集合中有偶数那么我们必然能跳出(1,0),这样就能到达任意点,否则我们只能跳(1,1)这样的,即需要x+y为偶数才能到达; 600:我们发现只要前n行m列所有数的奇偶性确定了,棋盘的所有格子的奇偶性就确定了,由于n,m只有10,因此可以直接状压dp SRM515 250:暴力枚举所有时刻,判定是否合法即可;坑点在于他挑选的基准点必须位于某个30度的倍数 550:考虑普通的概率dp[cur][sword][mask]代表从第cur小时开始,当前人的出现情况是mask,还剩下sword把剑时所能获利的最大期望值,转移的时候分cur小时的时候人出不出现,和出现时卖不卖即可 SRM516 250: n2 枚举一遍所有可能的key然后判一下是否合法即可 500:贪心,考虑每一列对答案的贡献,其实就是只考虑这一列时的答案乘以2的某个幂次,因此只需要按照只考虑这一列时的答案排序后算一下即可 SRM517 250:dp[x]代表x是否能必然产生target,转移是枚举约数,因此复杂度是 O(nn√) ,可以通过 600:我们发现一旦 a[i] 和 a[i+1] 进行了交换,那么 a[i] 左边和 a[i+1] 右边就互相独立,因为一边的数不可能再被换到另一边了,因此我们可以考虑这样的区间dp,dp[l][r][k]代表代表把 [l,r] 内的数排完序,且最后一步交换是 a[k],a[k+1] ,那么必须保证 a[l],a[l+1]..a[k−1],a[k+1] 恰好构成了 l,l+1,...k−1,k 的某个排列,然后在转移一下即可,通过预处理可以做到 O(n3) SRM518 250:预处理后每次选一个最大的字母贪心即可 500:一道乱搞题,我的做法是先令 b[i]=a[i+1]−a[i] ,则题目转化为每次给 b[i]−1,b[i+1]+1 ,问最少多少次操作之后可以使 b 序列单调不降,于是可以每一轮贪心的选择b[i]-b[i+1]最大的进行操作,可以证明这样操作在大约nlog(value)后次就会停止 SRM519 250:最后的答案某一位是0而低位全是1,之后+1后产生进位形成,因此只要枚举这个0的位置然后更新答案即可 600:比较简单的题,只要把输入串建成ac自动机,然后在自动机上状压dp即可 SRM520 250:由于数据范围比较小,直接 n3 暴力枚举luck的使用情况,再 23 枚举选择情况即可 500:看题目的数据范围,可以先预处理出 dp1[mask][score] ,代表是否得分的情况为mask并且最终得到score分的方案数,只要一层一层dp,并用打标记的方法就可以在 O(mask∗score) 的时间内得到,接着一个一个dp即可,dp的过程使用一个后缀更新答案 SRM521 250:贪心即可,只要在’)’没人匹配的时候添加’(‘即可 500:关键点在于包着点的正方形必然卡着某个出现过的x和y,因此我们可以 O(n2) 枚举这个正方形的一个角,之后,由于剩下的点只有n个,只要check一下与这n个点形成的正方形和lowbound与highbound,把符合条件的点插到set中去,最后只要看set中的点数即可,用数据结构维护可以做到 O(n3)logn ,不过直接暴力 O(n4) 也是可以通过的 SRM522 250:其实是一个比较有趣的题,只是这里数据范围太小,可以直接状压dp;不过仔细分析可以发现,alice能赢当且仅当两端有’A’; 450:首先C有一个上界,只要把A改成1,B改成C就可以得到一组解,那么C=A*B,显然有A,B中较小的那个 <=105 <script type="math/tex" id="MathJax-Element-23"><=10^5</script>,因此只需要枚举一下就可以得到答案;另一种解法在于,我发现C的变动不会特别大,因此从 [C−500,C+500] 暴力枚举C,之后再枚举约数,更新一下答案即可 SRM523 250:只要等比数列公比不是1,那么项数是很少的,暴力枚举即可,否则只要检查一下c在不在等差数列当中即可 500:tc上比较典型的dp题, dp1[i][j] 代表长为i,高<=j.且最右侧一定被填充的方案数, dp2[i][j] 代表长为i,高<=j的方案数,转移只需要枚举最右测放几个,之后又间隔多少个空格,通过预处理可以得到一个 O(n4) 的解答