这个题代码难度几乎为0,然而思维难度对于蒟蒻来说简直是突破天际啊!首先我思考的是这个油漆的种类只有15种,是不是可以像一道叫做8数码难题的东西暴力15维数组呢..计算发现不可以....空间会直接让你学会做人,然后就是看到每种油漆最多有5桶,所以自然想到把这几桶分别有几种油漆作为状态转移,然后,蒟蒻就没有继续下去的思路了..点开题解先看到这题与王八棋那道题的思路类似所以回忆了一下,有了一个大概的思路,就是按照这个方案记忆化搜索,然后根据乘法原理,直接乘上刚刚搜到的就可以了.没想到的是,一遍就过了.…
1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1079 Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的…
有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i 种颜色的油漆足够涂ci 个木块.所有油漆刚好足够涂满所有木块,即 c1+c2+...+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案. Solution 有一个非常好的条件就是c[i]<=5,这样我们就可以设计状态为dp[1][2][3][4][5][la]表示有一个的有几种颜色,有两个的有几种颜色·····,上一次我们枚举的是哪里. 然后就愉快的记忆化搜索,注意要求相邻木块颜…
题意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块. 所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两 个相邻木块颜色不同的着色方案. 题解:写爆搜妥妥的tle 但是看一眼dp数组应该就秒懂了... 还能涂一个的颜色有几种 还能涂两个的颜色剩几种.... 就是一个ez的记忆化搜索了 总结:感觉这道题还是挺套路的 直接爆搜是不行的 但是发现有许多状态其实是一样的 比如当前还剩…
题目传送门 题目大意: 有k种颜色,每个颜色ci可以涂个格子,要求相邻格子颜色不能一样,求方案数.ci<=5,k<=15. 思路: 题目里最重要的限制条件是相邻格子颜色不能相同,也就是当前格子只和上一个格子有关,那么对于还剩相同个数的颜色,如果都和上一个颜色不一样的话,那么这几种颜色都是一样的.如果某一种颜色和上一个颜色一样,那这个不算就可以了. 所以f[a][b][c][d][e][last]表示,还剩1次的颜色有a个,2两次颜色有b个,3次的颜色有c个,4次的颜色d个,5次的颜色e个,上一…
链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁先挤奶的顺序.她们甚至也不能通过仍硬币的方式. 所以她们通过"round number"竞赛的方式.第一头牛选取一个整数,小于20亿.…
题意 题目链接 求出把$n$分解为斐波那契数的方案数,方案两两不同的定义是分解出来的数不完全相同 Sol 这种题,直接爆搜啊... 打表后不难发现$<=1e18$的fib数只有88个 最先想到的应该是直接把$n$加入到搜索状态里,然后枚举能被分成哪些 但是这样分解出来的数可能会有重复的,因此我们还要把当前考虑到第几个数也加入到状态里. 不难得到以下代码 但是很显然会T飞. 优化一下,只考虑当前的fib数对答案的贡献, 也就是搜两种情况: 1.用该数分解 2.不用该数分解 代码是这样的 然而还是会…
Y - How many ways Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1978 Appoint description: Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标有的能量. 2.机器…
题目链接 题意 : 每一颗子弹破坏了三个邻近的阳台.(第N个阳台是与第1个相邻)射击后后的生存的怪物都对主角造成伤害- 如此,直到所有的怪物被消灭,求怎样射击才能受到最少伤害. 思路 : 状压,数据不是很大,可以爆一爆,或者DFS下去就行,枚举每一种状态. #include <cstdio> #include <cstring> #include <iostream> #define oo 1 << 28 using namespace std ; ],dp…
Pascal's Travels Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description An n x n game board is populated with integers, one nonnegative integer per square. The goal is to travel along any legitimate pat…
题意:给一个只有三行的方块阵(横向最多100个),然后p,q,r分别代表第1,2,3层的方格数,两人轮流去掉一个格子,此时这个格子的右上方都会被去掉,面临只剩最左下角的一个格子的状态的人输,问先手能否赢,要赢得话应该取哪个方格. 解法:记忆化搜索,设dp[p][q][r]表示第1,2,3层方格数分别为p,q,r的输赢状态,0为输,1为赢,X[][][],Y[][][]分别表示其该取的方格坐标.每次求dp[p][q][r]时,枚举能达到的状态,如果这些状态的输赢值有一个为输,则此状态一定为赢,返回…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25839 思路:第一小问可以很快求出了,两个字符串的长度-LCS,然后第二问就要记忆化搜索了,dp[i][j][l]表示A串的前i个和B串的前j个组合,长度为l的组合数. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using…
题目链接:BZOJ - 1068 题目分析 这种记忆化搜索(区间 DP) 之前就做过类似的,也是字符串压缩问题,不过这道题稍微复杂一些. 需要注意如果某一段是 S1S1 重复,那么可以变成 M + Solve(S1) + R ,不过这个 Solve(S1) 中不能在中间有 M ,否则后面的 R 向前找到的 M 就不再是开头的 M 了. 代码 #include <iostream> #include <cstdio> #include <cstring> #include…
题目:http://codeforces.com/contest/398/problem/B 有点似曾相识的感觉,记忆中上次那个跟这个相似的 我是用了 暴力搜索过掉的,今天这个肯定不行了,dp方程想了非常久也没有想出来,有点无从下手的感觉,最后还是尝试了一下记忆化搜索,以dp[0][0]为边界,dp[x][y]代表当前有x行y列没有彩色的 瓷砖,搜索起来思路还是非常清晰的,可惜最后那个 算期望公式给写错了,瞎了好久,做出以后看了一下别人的做法,确实有点难想到,把涂好的都放在右下角,这样就仅仅有四…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3652 题意:给你一个n,为比n小的能整除13并数字中有13的数有多少个 题解:记忆化搜索:记dp[i][j][k][l]为当前为第i位i+1位的数为j,余数为k,是否含有13的数的个数,然后搜索下去就得出答案了 #include<cstdio> #include<cstring> #define F(i,a,b) for(int i=a;i<=b;i++) ][][][],n,d…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1638 题意: 给你一个有向图,n个点,m条有向边. 对于所有从入度为0的点到n的路径,找出被经过次数最多的一条边,输出这个次数. 题解: edge为原边,redge为反向边. cnt[i]表示从入度为0的点到i的路径数. rev[i]表示从i到n的路径数. 两遍记忆化搜索,处理出数组cnt和rev. 每条边(a,b)被经过的次数 = cnt[a]*rev[b] 扫一遍取最大,即为答案.…
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1283 题解:这题很显然一看就像是区间dp,但是单纯的区间dp好像解决不了问题可以稍微利用一下区间dp的思想.其实这题就是单纯的往左右放那么很容易会想到用记忆化搜索.设dp[now][l][r],now表示处理到哪一位,l表示左边数最靠右的数是哪个.r表示右边最靠左的数是哪个.那么就是简单的记忆化搜索一下就行了. #include <iostream> #include &l…
https://codeforces.com/contest/1152/problem/D 题意 给你一个n代表合法括号序列的长度一半,一颗有所有合法括号序列构成的字典树上,选择最大的边集,边集的边没有公共点,问边集大小 题解 对于一颗字典树,从低向上贪心,最底层的边全拿,定义好状态,记忆化搜索计数 定义dp[i][j]为左括号数量为i,右括号数量为j的最大边集 \(i<n\),\(dp[i][j]->dfs(i+1,j)\) \(j<i\),\(dp[i][j]->dfs(i,j…
题目传送门(内部题133) 输入格式 第一行一个正整数$n$. 第二行$n$个正整数$a_i$,表示一开始有$S_i=\{a_i\}$ 输出格式 输出一个非负整数表示最大的收益之和 样例 样例输入: 41 2 2 2 样例输出: 数据范围与提示 样例解释: 先合并第一个和第二个,得到$\{1,2\},\{2\},\{2\}$,产生的收益为$1$ 再合并第一个和第二个,得到$\{1,2\},\{2\}$,产生的收益为$2$ 再合并这两个,得到$\{1,2\}$,产生的收益为$2$ 所以答案是$5$…
题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, 就是因为用了递归, 递归时大量的出入栈操作必然比循环时间来得久 这题估摸着是每个测试样例就一个数, 记忆化的优势显示不出来, 但还是要认真看题 严格要求自己 记忆化搜索 vector<int> dp; int climbStairs(int n) { if (dp.size() <= 2)…
题意: How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2672 Accepted Submission(s): 1566 Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起…
题目 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块. 所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两 个相邻木块颜色不同的着色方案. 输入格式 第一行为一个正整数k,第二行包含k个整数c1, c2, - , ck. 输出格式 输出一个整数,即方案总数模1,000,000,007的结果. 输入样例 3 1 2 3 输出样例 10 提示 100%的数据满足:1 <= k <=…
我们发现 $c_{i}$ 和 $k$ 的规模非常小我们还发现每种颜色的位置是不必知道的,只要这种颜色和相邻的颜色种类不同即可.定义状态 $f[a][b][c][d][e][last]$,代表有 $a$ 个还可以放 1 个,$b$ 个可以放 2 个,$c$ 个可以放3个......上一个状态最后一个放的数是可以放 $last$ 个的种类. 考虑记忆化搜索:$f[a][b][c][d][e][last]+=f[a-1][b][c][d][e][1]*(a-(last==2))$考虑当前放可以放1个的…
第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一些斐波那契数的和的形式.如果我们要求不同的方案中不能有相同的斐波那契数,那么对一个N最多可以写出多少种方案呢? 题意是说数列中不能出现相同的数. 显然要记忆化搜索. 直接搜会T,我们枚举下一个数填什么是要从大到小枚举,可以使效率有指数级的提升. 这是枚举上界,枚举下界可以用前缀和+二分来优化枚举复杂度. 加了这两个优化后代…
P3953 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会去逛公园,他总是从1号点进去,从N号点出来. 策策喜欢新鲜的事物,它不希望有两天逛公园的路线完全一样,同时策策还是一个 特别热爱学习的好孩子,它不希望每天在逛公园这件事上花费太多的时间.如果1号点 到N号点的最短路长为d,那么策策只会喜欢长度不超过d+K的路线. 策策同…
本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 本来是写个 DP 分分钟就 A 了,结果老师要我们写记忆化搜索(无奈脸) 算啦,随手一改又是一个标准的记忆化搜索(目测好像是记忆化搜索容易码一些,而且跑得快一些) 话说不取模也可以A,数据太水 很水的题吧,先 SPFA 跑一遍 2 的最短路,然后记忆化搜索统计方案 不难证明在加上最短路的限制条件后,图变成了一个 DAG 证明:首先有向是显然的,不可能存在两点 x,y,它们的最短路 d[x]>d[y] 又 d[x]<d[y] 若存在一…
How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4926    Accepted Submission(s): 2917 Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下:1.机器人一开始在棋盘的起始点并有起…
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝. 输入格式 输入一行3个整数,用空格分开:n…
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱”. 两只老虎两只老虎,跑得快跑得快. 一只没有耳朵,一只没有尾巴. 真奇怪,真奇怪. Tmk也觉得很奇怪,因为在他面前突然出现了一群这样的老虎,有的没耳朵,有的没尾巴,不过也有正常的. 现在Tmk告诉你这群老虎的耳朵个数,尾巴条数,以及老虎的腿的数目,问你有多少只是正常的. 其中只有三种老虎: 第一…
Description 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的时间. 策策每天都会去逛公园,他总是从1号点进去,从N号点出来. 策策喜欢新鲜的事物,他不希望有两天逛公园的路线完全一样,同时策策还是一个 特别热爱学习的好孩子,他不希望每天在逛公园这件事上花费太多的时间.如果1号点到N号点的最短路长为d,那么策策只会喜欢长度不超过d+K的路线. 策策同学想知道总共…