随笔分类 - dp专题训练
摘要:题意:输入n和k,表示一个n位的k进制数,这个数字要符合两个条件,没有前导0(否则怎么算是n位数呢?),不能有两个或以上连续的0,问你一共有多少个这样的n位的k进制数思路:n位可以 由 n - 1 位 推出 所以 是 dp 因为不能有两个或以上的连续的0 ,所以就分为 ,最后一位 为0 和 不为0 的情况 dp[i][0] 表示前 i位 k 进制 数 最后一位 位0 的个数, dp[i][1] 表示最后一位不为0 的个数 状态转移方程: dp[i][0] = dp[i][1] ; dp[i][1] = (k - 1)*(dp[i][0] + dp[i][1]) ; 初始化时 dp[1][0]
阅读全文
摘要:http://codeforces.com/problemset/problem/192/B题意: 有 n 个地板 ,你可以 从 i 跳到 i +1 也可以 跳到 i + 2 ,我们的任务是 从 i 跳到 n 下雨了 ,每个 地板 有 能够 坚持的 天数 a[i] , 求最多 多少天以后 我们 还可以 跳到 n 地板 。题解: dp . 看到跳到 n 点的 有 两个点 n-1点 和 n - 2点 所以 我们 用 dp[i] 表示最长 dp[i]天 后 一样 能够 跳到 第 i 个点; dp[i] = min(max(dp[i - 1],dp[i - 1]) ,a[i]) ; ...
阅读全文
摘要:Robberieshttp://acm.hdu.edu.cn/showproblem.php?pid=2955 背 包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱最脑残的是把总的概率以为是抢N家银行的概率之和…把 状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋); 正确的方程是:f[j]=max(f[j],f[j-q[i].money]*q[i].v)其中,f[j]表示抢j块大洋的最大的逃脱概率,条件是f[j-q[i].money]可达,也就是之前抢劫过;始化为:f[0.
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1087题意: 求最大上升子序列 。。。。1#include<cstdio>2#include<cstring>3#include<cmath>4#include<iostream>5#include<algorithm>6#include<set>7#include<map>8#include<queue>9#include<vector>10#include<string>11#defin
阅读全文