这道题目状态转移方程比较复杂,刚开始以为没这么多情况,看了好多大牛的博客再加上与同学讨论才看懂,写下心得. 因为起点不固定,所以我们一个一个来考虑,先从角上考虑,设三个数组来表示分别为D,A,Sum,分别表示为“从一个角开始然后回到同一列的对应位置的总个数”, “从一个角开始的总个数(包括回到对应位置和不回到对应位置)”, “表示总的个数” 1. 当回到对应位置时: D[1] = 1,D[n] = 2 * D[n-1]; 因为他可以有两种方式出去,最后再回来,如图(a), 图上是以右上角这个格子…
目录 1 问题描述 2 解决方案   1 问题描述 问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 比如:a d b c e f 就是合格的刷漆顺序. c e f d a b 是另一种合适的方案. 当已知 N 时,求总的方案数.当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模.…
标题:格子刷油漆 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如图1所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 比如:a d b c e f 就是合格的刷漆顺序. c e f d a b 是另一种合适的方案. 当已知 N 时,求总的方案数.当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模. 输入数据为一个正整数(不大于1000) 输…
问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 比如:a d b c e f 就是合格的刷漆顺序. c e f d a b 是另一种合适的方案. 当已知 N 时,求总的方案数.当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模. 输入格式 输入数据为一个正整数(不大于1000)…
个人博客页:https://www.scriptboy.cn/198.html 出处:蓝桥杯 题目描述: X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!)比如:a d b c e f 就是合格的刷漆顺序.c e f d a b 是另一种合适的方案.当已知 N 时,求总的方案数.当N较大时,结果会迅速增大,请把结果对 10…
题目描述: 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MOD 1000000007 ] = {}; ] = {}; int main(void) { int i,n; long long sum; ] = {,,,}; ] = {,,,}; scanf("%d",&n); ; i<=n ; i++) { b[i] = (b[i-]*%…
传送门 结果:Accepted     提交时间:2015-05-11 10:36:08 #1055 : 刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球间都不存在两条不同的路径可以互相到达.没错,这次说的还是这棵树玩具的故事! 小Ho的树玩具…
#1055 : 刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球间都不存在两条不同的路径可以互相到达.没错,这次说的还是这棵树玩具的故事! 小Ho的树玩具的质量似乎不是很好,短短玩了几个星期,便掉漆了! "简直是一场噩梦!"小Ho拿着…
题目大意 一棵树,每个节点都有相应的value值.从根开始选择M个节点相互连通,使得这些节点的value值之和最大. 题目链接:[刷油漆][1] 题目分析 典型的树形dp,dp[i][j] 表示以节点i为根的子树中选择j个节点(从i节点出发)相互连通,所能达到的节点value之和的最大值.可以很容易知道, dp[root][k] = max{dp[ch1][k1] + dp[ch2][k2] + .. dp[cht][kt]}. 即将k-1个节点分配给 根节点root的t个子节点,其中 k1 +…
刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球间都不存在两条不同的路径可以互相到达.没错,这次说的还是这棵树玩具的故事! 小Ho的树玩具的质量似乎不是很好,短短玩了几个星期,便掉漆了! “简直是一场噩梦!”小Ho拿着树玩具眼含热泪道. “这有…
思路: 只能刷部分节点数m,总节点数n.如果m>=n那么就可以全刷了,那就不用任何算法了.如果m<n那么就要有取舍了.用DP思路,记录下每个节点如果获得到1~m个选择所能获得的最大权值.这里的树不仅仅是二叉,可能是多叉.所以一个节点怎么合理分配给每个孩子的空间大小很关键,当第一个孩子获得了1空间,那么后面的孩子所能获得的空间就要少一个了.这样穷举每个孩子能得到的空间,来求当前节点的最大权值,会有很多种可能,m!.不用这么做. 递归步骤: 假设状态记录为 dp[节点][该节点所获得的空间大小]…
上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球间都不存在两条不同的路径可以互相到达.没错,这次说的还是这棵树玩具的故事! 小Ho的树玩具的质量似乎不是很好,短短玩了几个星期,便掉漆了! “简直是一场噩梦!”小Ho拿着树玩具眼含热泪道. “这有什么好忧伤的,自己买点油漆刷一刷不就行了?”小Hi表示不能理解. “还可以这样?”小H…
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球间都不存在两条不同的路径可以互相到达.没错,这次说的还是这棵树玩具的故事! 小Ho的树玩具的质量似乎不是很好,短短玩了几个星期,便掉漆了! “简直是一场噩梦!”小Ho拿着树玩具眼含热泪道. “这有什么好忧…
描述 小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球间都不存在两条不同的路径可以互相到达.没错,这次说的还是这棵树玩具的故事! 小Ho的树玩具的质量似乎不是很好,短短玩了几个星期,便掉漆了! "简直是一场噩梦!"小Ho拿着树玩具眼含热泪道. "这有什么好忧伤的,自己买点油漆刷一刷不就行了?"小Hi表示不能理…
动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% 困难 53 最大子序和 C#LeetCode刷题之#53-最大子序和(Maximum Subarray)-该题包含分治讨论 38.4% 简单 62 不同路径   49.5% 中等 63 不同路径 II   29.4% 中等 64 最小路径和   55.0% 中等 70 爬楼梯   40.8% 简单…
题目大意:给一棵带点权的树,现在要从根节点开始选出m个连通的节点,使总权值最大. 题目分析:定义状态dp(u,m)表示在以u为根的子树从根节点开始选出m个点连通的最大总权值,则dp(u,m)=max(dp(u,m),dp(u,m-k)+dp(son,k)),其中0<=k<m.这是01背包,k应该从大往小枚举. 代码如下: # include<iostream> # include<cstdio> # include<cmath> # include<v…
题目链接: https://hihocoder.com/contest/hiho12/problem/1 给出一棵树 每个节点的价值 求以1为根的树中,选取m个相联通的节点的最大价值和 #include <bits/stdc++.h> using namespace std; ; int n, m, V[N]; int dp[N][N]; // 以i为根 个数为m的最大价值 bool vis[N]; vector<int> G[N]; void dfs(int u) { vis[u…
知识点 专题-B-动态规划 题目 斐波那契数列 矩阵路径 数组区间 分割整数 最长递增子序列 最大连续子序列和 最长公共子序列 最长回文子序列 最长公共子串 最长回文子串 背包 题解 CS-Notes Algorithm_Interview_Notes-Chinese awesome-algorithm zcy19941015的博客…
[题目链接]:http://hihocoder.com/problemset/problem/1055 [题意] [题解] 设f[x][i]表示以第x个节点为根的子树; 不选x这个节点,然后子树里面选i个其他点能够获得的最大价值; 在枚举儿子y的时候进行DP,第一层枚举这个子树里面选了多少个节点i->逆序枚举,用01背包的更新方式节省空间; 第二层,枚举这个儿子的子树里面选了几个节点k(也不包括这个儿子节点); 则 f[x][i] = max(f[x][i],f[x][i-k]+f[y][k-1…
一个简单的树上的背包问题. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <string> #include <queue> #include <stack> #include <vect…
题目:https://vjudge.net/contest/323605#problem/A 题意:一棵树,让你选择m个点的一个连通块,使得得到的权值最大 思路:树上背包,我们用一个dp数组,dp[i][j] ,代表以i为根时的选其子树j个节点所得到的最大值,然后我们对于每个以i为根我们当做有m件物品,然后对于不同的子树当作不同的分组即可 #include<bits/stdc++.h> #define maxn 105 #define mod 1000000007 using namespac…
[题意]一个2*n的网格,再保证步数最少的情况下,求从任意格出发遍历完所有格的方案数,格子八连通.n<=10000,T<=100. [算法]递推,DP [题解]原题链接:蓝桥杯 格子刷油漆(动态规划) 这类题目最重要的是找到一个可以计算所有情况的状态表示. 对于2*x的网格,a[x]表示从左上角出发遍历完所有格子的方案数,b[x]表示从左上角出发遍历完所有格子并在左下角结束的方案数. 显然,b[x]=2*b[x-1]. 先考虑起点在左上角,有三种情况: ①先走到对面(左下角),再往右走,a[x…
1.猜灯谜(枚举) 2.连续奇数和(等差数列) 3.空白格式化(去除空格) 4.高僧斗法(阶梯nim) 5.格子刷油漆(dp) 6.农场阳光 1.猜灯谜 A 村的元宵节灯会上有一迷题:请猜谜 * 请猜谜 = 请边赏灯边猜小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字. 请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可. 答案:897 #include<iostream> #include<stdio.h> using namespace std…
目录 1 猜灯谜 2 连续奇数和 3 空白格式化 4 高僧斗法 5 格子刷油漆 6 农场阳光   前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 猜灯谜 标题:猜灯谜 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字. 请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可. 请严格按照格式,通过浏览器提交答案. 注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字. packag…
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜灯谜 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字. 请你用计算机按小明的思路算一下,然后提交"请猜谜"三个字所代表的整数即可. 请严格按照格式,通过浏览器提交答案. 注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字. 897 package com.liu.Main; public class Main { pub…
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜灯谜 题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字. 请你用计算机按小明的思路算一下,然后提交"请猜谜"三个字所代表的整数即可. 请严格按照格式,通过浏览器提交答案. 注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字. public class Main { public static void main(…
[问题描述] Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板从左到右依次标号1到N.这N块木板中,有M块木板前面放着一桶油漆.油漆有不同的颜色,每种颜色可以由一个大写字母表示(A到Z).而你要求Czy用他的油漆刷子给栅栏刷上油漆. 已知Czy会选择一个前方放有油漆桶的木板开始他的任务.刷子蘸上油漆后,他开始随机地沿着栅栏走,他不会走出栅栏的范围.随机地走…
问题描述 Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板从左到右依次标号1到N.这N块木板中,有M块木板前面放着一桶油漆.油漆有不同的颜色,每种颜色可以由一个大写字母表示(A到Z).而你要求Czy用他的油漆刷子给栅栏刷上油漆. 已知Czy会选择一个前方放有油漆桶的木板开始他的任务.刷子蘸上油漆后,他开始随机地沿着栅栏走,他不会走出栅栏的范围.随机地走表示…
分别对每块木板做区间dp,设\(g[i][j]\)表示前i个格子,刷恰好j次,并且第i格是合法的最多合法的格子数.从前往后枚举断点来转移就好了. 这样处理再出来\(g[i][j]\)每一块木板i刷j次的最大合法格子数. 最后再合并每块木板的答案,用\(dp[i][j]\)表示前i块木板,一共恰好刷了k次的最大合法格子数,用刷表法暴力背包合并就好了. 很详细的注释. #include<iostream> #include<cstring> #include<cstdio>…
这的确是最惨的一次模拟了……不会再惨了(10pts除非爆零orz) 总结一下吧…… T1 .章鱼 众所周知,雪舞喵有许多猫.由于最近的天气十分炎热,雪舞城的大魔法师雪月月根本不想出门,只想宅在家里打隔膜.大魔法师雪月月最近沉迷一个叫做社保2的隔膜,在这个隔膜的休闲对战模式中,雪月月和其他3个随机的玩家组队,与另外4个随机的玩家组成的队伍进行战斗.一场战斗中,两个队伍会被分配不同颜色的两种油漆,玩家需要操纵一个章鱼油漆工在有限的时间内往地图上刷油漆,时间结束时,地图上油漆所占面积较多的队伍将会获得…