上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 25 下一页
摘要: 题目链接:http://poj.org/problem?id=3133 用两条线段分别连接2-2和3-3,使得他们长度的总和最小。 典型的插头DP题目,用0,2,3,种状态来表示每个格子的插头分别是没有插头,2号插头,3号插头,然后把所有可能的转移情况列出来,只是情况比较多,而且一定要考虑仔细,不然检查代码会很惨的。。话说A完这道题后感觉真爽啊O(∩_∩)O~ 1 //STATUS:C++_AC_360MS_900KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #inclu 阅读全文
posted @ 2013-04-03 13:12 zhsl 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3399 要注意此题的班级必须是连续的!!! 转移方程容易想出来:f[i][j]表示前 i 个班级分 j 个学生的最优解,那么 f[i][j]=Min{ f[i-1][k] + Σ(x[k]-L)^2*g[i] | j-B<=k<=j-A },然后预处理Σ(x[k]-L)^2 -> s[k]。则 f[i][j]=Min{( f[i-1][k] - s[k]*g[i] ) + s[j]*k| j-B<=k<=j-A },注意到 f[i] 阅读全文
posted @ 2013-04-02 01:14 zhsl 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1739 完全可以用Ural 1519 Formula 1 插头DP(单回路)的代码解决此题,只要把图修改一下: .... ........ .... -> .######. .... .#....#. .#....#. .#....#. ........ 当然也可以在起点和终点独立处理插头。修改建图:View Code 1 //S... 阅读全文
posted @ 2013-04-01 01:18 zhsl 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1519 一条哈密顿回路路,反正是写到蛋疼了,不过终于解决了,插头DP这玩意,太容易出错了,要注意block的处理。 1 //STATUS:C++_AC_343MS_961KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 阅读全文
posted @ 2013-04-01 01:10 zhsl 阅读(607) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2352 水题。。。 1 //STATUS:C++_AC_204MS_696KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 #include<queu 阅读全文
posted @ 2013-03-30 11:13 zhsl 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1693 插头DP的入门题,属于轮廓动态规划一类,推荐看《基于连通性状态压缩的动态规划问题》,陈丹琦写的,Orz女神... 1 //STATUS:C++_AC_0MS_272KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #inc 阅读全文
posted @ 2013-03-29 01:50 zhsl 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1160 f[i][j]表示前 i 个村庄放 j 个邮局的最小花费,w[i][j]表示 i-j 村庄之间放一个邮局的最小花费,则转移方程:f[i][j]= Min{ f[k][j-1] + w[k+1][i] },把f[i][j]转换一下,表示前 j 个村庄放 i 个邮局的最小花费,则 f[i][j]=Min{ f[i-1][k] + w[k+1][i] }。 四边形不等式优化有如下定理: 1.当决策代价函数w[i][j]满足w[i][j]+w[i’][j’]<=w[I;][j]+w[i][j’](i<=i’<=j 阅读全文
posted @ 2013-03-26 13:39 zhsl 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2355 简单的DP,转移方程:f[i][j]=Min { f[i][k] + C(n) },注意到f[i][j]是单调递增的,用二分搜索优化即可。注意到此题有个trick,那就是s>e!!! 1 //STATUS:C++_AC_16MS_252KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #inclu 阅读全文
posted @ 2013-03-26 13:16 zhsl 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://www.acdream.net/problem.php?id=1083 简单数位DP,貌似我写得太暴力了= = 1 //STATUS:C++_AC_20MS_1512KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vec 阅读全文
posted @ 2013-03-25 16:53 zhsl 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2374 这个题目坑了好久啊,题意看错了,bs自己。 其实不难的,状态方程容易相处来,每个fence只有两种状态,即左边下去和右边下去,如果要知道当前状态的最优情况,就必须知道前面所有状态的最优情况,最坏情况下复杂度O(n^2)。但显然可以发现前面有很多的状态都不能到达当前状态于,因为前面的有些状态被覆盖了,于是我们可以用线段树来优化,在log(n)的时间里找到可以到达当前状态的fence。虽然在log(n)的时间里找出了状态,但是还是有比较多的状态,还可以继续优化。注意到编号为 i 的fence和所有编号为 1,2,,,,... 阅读全文
posted @ 2013-03-22 14:10 zhsl 阅读(545) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555我的DP方程:f[i][j]表示数的第i位以j开头的数含有49的个数,则状态转移方程为: 1.j!=4时: f[i][j]=sum{ f[i-1][k] | 0<=k<=9 } 2.j==4时:f[i][j]=sum{ f[i-1][k] | 0<=k<=9 } - f[i-1][9] + pow(10,i-2) (因为j=4时,只要i-1位为9,后面的都满足)这样的转移方程思路比较清晰,在网上看到别人的转移方程是这样的: 1.f[i][0]=10*f[i-1][0]- 阅读全文
posted @ 2013-03-21 14:35 zhsl 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3345 国家之间可能存在依赖关系,可以求出每个国家向下的每种情况的最优消费,即f[u][i]表示节点为u时选择i个国家的最优消费。自底向上更新时就是分组背包问题了: f[u][i]=Min{ f[u][i],f[u][i-j]+f[v][j] | v为u的儿子节点,0<=j<=v子树的节点数 },其实本来是3维的,不过这里用滚动数组优化了。 1 //STATUS:C++_AC_16MS_588KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #inclu 阅读全文
posted @ 2013-03-21 14:20 zhsl 阅读(514) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3280 典型的区间DP问题,fp[i][j]表示第i-j个字符经过修改后的最优值,则状态转移方程如下: f[i][j]=Min(f[i][j],f[i][j-1]+Min(cost[s[j]][0],cost[s[j]][1])); f[i][j]=Min(f[i][j],f[i+1][j]+Min(cost[s[i]][0],cost[s[i]][1])); if(s[i]==s[j]) f[i][j]=Min(f[i][j],f[i... 阅读全文
posted @ 2013-03-21 14:04 zhsl 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 第一种#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)#define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)#define ____ _(0x72)_(0x6C)_(0x64)_(0x21)#define _____ __ ___ ____ _________#include<std 阅读全文
posted @ 2013-03-19 14:15 zhsl 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 直接贴了: 1 #define LOCAL 2 3 /** ` Micro Mezzo Macro Flation -- Overheated Economy ., Ver 0.1 **/ 4 5 #include <functional> 6 #include <algorithm> 7 #include <iostream> 8 #include <fstream> 9 #include <sstream> 10 #include <iomanip> 11 #include <numeric> 12 #in 阅读全文
posted @ 2013-03-17 22:43 zhsl 阅读(387) 评论(0) 推荐(0) 编辑
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 25 下一页