随笔分类 - DP
hdu 4433 locker
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4433记忆化搜索+DPans[x][f][ff]; 表示到a的第x位时 此位加f ,x-1位 加ff 的情况下的最优解a的x位加f后如果还不到 b[x] 然后分两种情况 一个是a的第x位不断加 直到等于b[x] 或者不断减直到等于b[x]对于两种情况 分别枚举长度为 1 ,2 ,3的个数的情况 对下两层的影响 对下两层的影响 无论是加多少还是减多少 都可以转化为 加上一个10以内的数(因为是循环的)然后不断递归时间复杂度 O(N*10*10*C(12,2)) 大约10^7代码及其注释:#include<
阅读全文
1463. Happiness to People!
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1463树形DP此题有个陷阱 就是图的本身是一个森林 不是树由于所有 happiness 的值都为非负 所有最优路径一定是从一个叶子节点到另一个叶子节点(当然 两个节点可能一样)思路:包含一个节点 和 两个节点的 树特殊处理对应3个节点以及3个节点以上的树 一定能找到一个初度 大于等于2 的点 以此点为根节点更新对于这个树 dfs 记录每个点向下的第一最优路径选择 和第二最优路径选择然后不断向上更新最后 把所有向下路径至少两条的节点 将此类节点的两个最优路径 连起来的路径进行和最终答案比较 择优而
阅读全文
1156. Two Rounds
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1156经典一维背包的原型是二维DP递推 由于其特殊性而被简化成了一维 就变成了背包此题的特殊性导致无法简化成一维背包 所以用二维DP递推思路:先把数据分成m组 每组有两个集合 这两个集合只能任选其一根据每个集合的组数和元素个数进行递推代码及其注释:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include&l
阅读全文
hdu 3905 Sleeping
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3905dp + 记忆化搜索把 M 和 L 弄反了 wa 了N久 我彻底无语了关键思路:在学了 L 之后如果想继续学 在学的时间无需大于等于 L代码及其注释:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<queue>#include<map>#include<stack>#incl
阅读全文
hdu 1404 Digital Deletions
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1404DP + 博弈论找奇异状态 能到达奇异状态的为 非奇异状态 怎么走都到非奇异状态的为奇异状态代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<queue>#include<map>#include<stack>#include<algorithm>using
阅读全文
toj 1017. Number Game
摘要:http://202.113.2.5:57778/toj/showp1017.htmlDP (状态压缩+记忆化搜索) + 博弈论基本思路:用状态压缩表示 那些是还可以选的 哪些是不可以选的在更新过程中 标记 是否是奇异状态代码及其注释:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<queue>#include<map>#include<stack>#include
阅读全文
1371. Cargo Agency
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1371树形DP 不过一遍DFS 就能可以需要注意的 是 N=50000 时 需要用 long long 或者 unsigned int还有超栈的话 需要 自己可一个较大的栈区代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<queue>#include<map>#includ
阅读全文
1326. Bottle Taps
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1326状态压缩DP题目大意:要买某几种 tap 每种买一个 既可以单个买 也可以成套买求最优买法.思路:dp[i] 表示 i 状态下的最优买法 即最少的花钱先初始化 dp[i] 求出单个买的花费再用成套的买法进行优化 选取符合要求的最优值代码及其注释:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<
阅读全文
1221. Malevich Strikes Back!
摘要:递推水题import java.util.*;import java.math.*;public class Main { public static void main(String[] args) { int n; Scanner in = new Scanner(System.in); while (in.hasNext()) { n = in.nextInt(); if (n == 0) { break; } int num0[][] = new int[n + 1][n + 1];//图形从上向下 此列连续的 0 的个数 int num1[][] = ...
阅读全文
1611. Decimation
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1611DP 递推显然这个题是可能有多组解的 求最优解+记录路径即可当 i 个 conductors 和 j 个 dodgers 时 最后的人可能是 conductor 也可能是 dodger 枚举这两种情况最优即可代码及其注释:#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <queue>#include <vector
阅读全文
1223. Chernobyl’ Eagle on a Roof
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1223DP 神一般的维度转换最简单的想法就是 dp[ i ][ j ] i 个蛋 j 层楼 最少需要多少次试验如果只有一个 蛋 则需要试验 j 次 否则:dp[ i ][ j ] =min( dp[ i ][ j ] , max ( dp[ i ][ j-w] , dp[ i-1] [w-1]) ); ( w<=j&&w>=1 ) (w 表示开始选择哪个楼层)虽然这样很好理解 但是 需要枚举 w 所以时间复杂度可以达到 1000^3 太高我们可以想象 在蛋的个数确定的
阅读全文
hdu 4405 Aeroplane chess
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4405代码:#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <algorithm>#define LL long long//#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;c
阅读全文
1389. Roadworks
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1389一维树形DP 不难 关键在于输出类似路径的选择求完最优答案 再顺着答案走一遍就可以了关键:从一个节点出发的各条 road 中 如果某一条 road 被 block 则相连的下一个节点开始的路都不能进行 block如果某一条路没有被 block 则相连下一个节点开始的路可以进行选择性的是否 block但要注意从一个点出发的 road 最多只能有一个block代码及其注释:#include <iostream>#include <cstdio>#include <
阅读全文
1577. E-mail
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1577递推 DP代码及其注释:#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <algorithm>#define LL long long//#pragma comment(linker, "/STACK:1024000000,1024000000")using
阅读全文
1287. Mars Canals
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1287我说Timus 你还能再水一些吗 递推 + 滚动数组代码:#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#define LL long long//#pragma comment(linker, "/STACK:1024000000,1024000000")using names
阅读全文
hdu 4284 Travel
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4284这题后台数据相当强呀思路:先用flody 求得任意两点间的最短距离然后再用 状态压缩+DPdist [ i ] [ j ] 表示已经到 i 状态压缩表示的城市 拿到证件 打工 而且现在在 第 j 个要去的城市 这种情况下剩余的最多钱不断更新 最后看是否有满足条件 去过所以要去的城市 而且还能回到原点的 状态代码及其注释:#include <iostream>#include <cstdio>#include <cstring>#include <queue>
阅读全文
1244. Gentlemen
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1244背包题 理解并不难主要在于如果答案有多个要输出 -1一个答案的话要输出结果 否则输出 0用 sum [ n ] 表示到 n 有几条路径状态转移方程为if(sum[j-a[i]])//a[i]表示第i个数据的大小{ sum[j]=max(sum[j]+1,sum[j-a[i]]);}代码及其注释:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#
阅读全文
hdu 4283 You Are the One
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4283三维dpans [ l ][ r ][ k ] 表示从 l 到 r 这一段 第一个出去的人需要 *k代码:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=102;const int INF=0x0fffffff;int a[N];int ans[N][N][N];int dp(int l,int
阅读全文
hdu 4276 The Ghost Blows Light
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4276树形dp 比赛时时间不够了没写基本思路:先求是否能到达 如果能到达求每个子树在一定时间下的最优解ans[i][j] 表示的是 以 i 的父节点为根的子树 还有j 时间时的最优解注意的是 到n的路径必须走无需返回 其他的可以走且需要返回还有一条路所花时间可能是 0 (这里让我wa了N久呀)代码及其注释:#include <iostream>#include <cstdio>#include <cstring>#include <map>#include &l
阅读全文
1346. Intervals of Monotonicity
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1346题目超级水代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<vector>#include<set>#include<queue>#include<stack>#include<cmath>#define LL long lon
阅读全文
浙公网安备 33010602011771号