摘要:
1495牵扯一点数位 保存数的时候我是按2进制保存的 把1当作0算 把2当作1算 滚动数组dp[i][j][(g*10+j)%n] = min(dp[i][j][(g*10+j)%n],dp[i-1][1][g]*2+j-1,dp[i-1][2][g]*2+j-1) j取1,2 *2+j-1是因为我按二进制算的时限给出的2S就是给我这种毫无优化又笨又戳的代码的 跑了1.39s0xfffffff的范围 是2Y多 还是少用好了 太容易超了 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using name.. 阅读全文
摘要:
1513这题好久之前就看过了,悲催的是当时看题解都没看懂,今天又看了看so easy...n个B里不能出现超过连续k个L的情况 一维递推就可以 两种情况 1、dp[i] += dp[i-1] 在i-1的串后面直接加一个B 2、dp[i]+=dp[i-2]+dp[i-3]+...+dp[i-k-1] 这部分的意思是在串后面补连续1个L 2个L 3个L。。K个L的情况 那补一个L的情况要取决于dp[i-1]里面最后一位为B的个数 正好为dp[i-2],依次可做。 1 import java.text.*; 2 import java.io.*; 3 import java.util.*; 4 im 阅读全文
摘要:
1900二维dp挺好推 dp[i][j] = max(dp[i][j],dp[g][j-1]+o[i][i+1]-o[g][i+1])(i>g>=j-1) dp[i][j]表示第i个站台开放第j次设备 预处理出来通过i-j的人数 包括 i-1~j+1等等的 用o[i][j]表示的没睡好 %>_ 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define LL long long10 int dp[510][510],q[510];11 in 阅读全文