2013年7月3日

合唱队形(LIS最长递增子序列) 解题过程

摘要: 【题目链接】:点击打开链接【解题思路】:1.学会把问题分解成简单的子问题求解:一开始想起来把这个问题分解成两个过程求解,求上升最长子序列和下降最长子序列,后来后者可以转化成前者来求 状态dp[i]表示结尾为num[i]的子序列的最大长度,状态方程为: dp[i]=1; if(num[i]>num[k]) (k=1~i-1) dp[i]=max(dp[i],dp[k]+1) 由此可见,动态规划状态的结果也不一定就是所求的最优值,只要它和最优值相关,由他可求出最优值即可。2.动态规划有时也是暴力的动态规划:即基于少量穷举的动态规划,穷举1~n分别作为最大值点的情况3.编程收获与心得:这... 阅读全文

posted @ 2013-07-03 00:37 Gddxz 阅读(170) 评论(0) 推荐(0) 编辑

2013年5月19日

BUCT-OJ 2060 数字三角形4

摘要: 【题目来源】: TYVJ 1084【题目链接】:点击打开链接【解题思路】:此题我的思路和数字三角形3的思路一样,只不过(n/2,n/2)换成了待输入的点(x,y),必然经过一点,那我就从这点为分界,先从顶递推至此点所在行,再从底递推至此点所在行,两次的结果累加在此点上,即为所得结果【A C代码】:#include #include #include #include using namespace std; #define maxn 30 int arr[maxn][maxn]; int main() { int n, i, j, x, y; while(~s... 阅读全文

posted @ 2013-05-19 14:17 Gddxz 阅读(146) 评论(0) 推荐(0) 编辑

BUCT-OJ 2055 数字三角形3

摘要: 【题目来源】: TYVJ 1079【题目链接】:点击打开链接【解题思路】:我的是既然必然经过一点,那我就从这点为分界,先从顶递推至此点所在行,再从底递推至此点所在行,两次的结果累加在此点上,即为所得结果【A C代码】:#include #include #include #include using namespace std; #define maxn 30 int arr[maxn][maxn]; int main() { int n, i, j, x, y; while(~scanf("%d", &n)) { memset(ar... 阅读全文

posted @ 2013-05-19 14:07 Gddxz 阅读(172) 评论(0) 推荐(0) 编辑

BUCT-OJ 2052 数字三角形2

摘要: 【题目来源】:TYVJ 1076【题目链接】:点击打开链接【解题思路】:刚开始没想到思路,想到暴力穷举会超时,就乖乖的使用动态规划,但怎么使用想的一团,晕了,真正独立做起题目来感觉动态规划还没入门的样子,就又重新从最基础的一点点向上想,首先动态规划最起码得有状态吧,那对应与每一个权值的状态是什么?感觉有很多种情况,没办法了,我穷举所有状态还不行吗,突然发现是mod100的,那一个权值最多就是100种情况了, 最多25行(1+2+...+25)*100=32500种情况,完全可以穷举。所以开一个三位数组arr[26][26][101],问题得解。【A C代码】:#include #includ. 阅读全文

posted @ 2013-05-19 13:54 Gddxz 阅读(411) 评论(0) 推荐(0) 编辑

BUCT-OJ 2046 数字三角形

摘要: 【题目来源】: TYVJ 1044【题目链接】:点击打开链接【解题思路】:最基础的动态规划,采用自底向上递,每个结点对应一个状态,取从最底下到达当前层该结点的路径最小路径之和为该结点状态,则可递推出状态转移方程:dp[i][j] = arr[i+1][j] + max(dp[i+1][j], dp[i+1][j+1]);【A C代码】:#include #include #include using namespace std; #define maxn 30 int arr[maxn][maxn]; int max(int a, int b) { return a ... 阅读全文

posted @ 2013-05-19 09:54 Gddxz 阅读(248) 评论(0) 推荐(0) 编辑

2013年5月11日

北大校赛2011 Word Ladder(C题) 解题报告

摘要: 套用模板,进行广搜。#include #include #include #include using namespace std;#define INFINITY 0#define MAX_VERTEX_NUM 6001 //顶点最多个数#define LENGTH 20 //顶点字符长度//*********************************邻接表***********************************begintypedef char VertexType[LENGTH];typedef struct ArcNode{ int ad... 阅读全文

posted @ 2013-05-11 16:35 Gddxz 阅读(121) 评论(0) 推荐(0) 编辑

导航