LA 6042 Bee Tower 记忆化搜索】的更多相关文章

一开始读漏了很多细节,用递推写死活跑不出样例. 把题目中的细节列一下吧,状态方程很好推,改成记忆化搜索之后代码也很清晰. 1.蜜蜂需要到最高的塔去,最高的塔可能不止一个,抵达任意一个即可. 2.蜜蜂每次只能到达相邻的塔,满足的条件为横向移动距离<=W,下一个塔高 <= 上一个塔高 + H. 3.蜜蜂可以选择任意高度小于等于H的塔作为起始塔. 4.塔可以移动,但是塔之间的相对位置不变.只有最高的塔是不能移动的. #include <cstdio> #include <cstdl…
题意 给定一个DFS序列,问能有多少树与之对应. 思路 设输入序列为S,dp(i, j)为子序列Si, Si+1, --, Sj对应的树的个数,则边界条件为d(i, i) = 1,且Si != Sj时d(i, j) = 0(因为起点和终点应该是同一个点).在其他情况下,设第一个分支在Sk时回到树根(必须有Si == Sk),则这个分支对应的序列是Si+1, Si+2, -- , Sk-1,方案数为dp(i+1, k-1):其他分支访问序列为Sk, Sk+1, --, Sj,方案数为dp(k, j…
题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 << m) - 1则是可能的.打印与之前相似. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 25 + 5; const int NODE = 10 * 10 + 5;…
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=378 [题意] 给你n个方形; 由3个属性,长宽高决定; 你可以任意摆放这个方形(即把哪一面朝下方); 然后每种方形都有无限个; 一个方形能够摆在另外一个方形上面,当且仅当这个方形的长和宽都严格大于另外一个方形的长和宽(即changi>changj &&…
题意:Alice和Bob玩一个游戏,有两个长度为N的正整数数字序列,每次他们两个,只能从其中一个序列,选择两端中的一个拿走.他们都希望可以拿到尽量大的数字之和, 并且他们都足够聪明,每次都选择最优策略.Alice先选择,问最终Alice拿到的数字总和是多少? 析:很明显的一个博弈题,但是用记忆化搜索来解决的,用d[la][ra][lb][rb]记录的是在a的区间只剩下la~ra,b的区间只剩下lb~rb的时候,Alice能得到的最大值, 那么我应该在让Bob取最大值中的最小才能满足这个题,当是A…
描述 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=378 n种方块,给出每一种的长宽高,现在要落起来,上面的方块的长和宽要严格小于下面的方块,问最多落多高. ACM Contest Problems ArchiveUniversity of Valladolid (SPAIN)437 The Tower of BabylonPerhap…
有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i 种颜色的油漆足够涂ci 个木块.所有油漆刚好足够涂满所有木块,即 c1+c2+...+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案. Solution 有一个非常好的条件就是c[i]<=5,这样我们就可以设计状态为dp[1][2][3][4][5][la]表示有一个的有几种颜色,有两个的有几种颜色·····,上一次我们枚举的是哪里. 然后就愉快的记忆化搜索,注意要求相邻木块颜…
矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度).例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中.你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内.   输入 第一行是一个正正数N(0<N<10),表示测试数据组数…
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> using namespace std; #define maxn 1000+5 int n; int a[maxn][maxn]; int d[maxn][maxn]; int main(){ for(;cin>>n && n;){ memset(d,,sizeof(d));…
3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] Description Alice和Bob两个好朋含友又开始玩取石子了.游戏开始时,有N堆石子 排成一排,然后他们轮流操作(Alice先手),每次操作时从下面的规则中任选一个: ·从某堆石子中取走一个 ·合并任意两堆石子 不能操作的人输.Alice想知道,她是否能有必胜策略. Input 第一行输入T…