1 #include 2 #include 3 #include 4 #define maxn
125 5 using namespace std; 6 7 int cost[maxn][maxn],w[maxn][maxn]; 8 int
dp[maxn][maxn]; 9 int N,M;1.....
分类:
其他好文 时间:
2014-06-04 14:44:42
阅读次数:
234
求最长合法匹配的长度,这道题可以用一维动态规划逆向求解。假设输入括号表达式为String s,维护一个长度为s.length的一维数组dp[],数组元素初始化为0。 dp[i]表示从s[i]到s[s.length - 1]包含s[i]的最长的有效匹配括号子串长度。则存在如下关系:...
分类:
其他好文 时间:
2014-06-04 13:52:03
阅读次数:
279
题意:中文题。不说了。注意一些地方,机器的执行过程是没有顺序的,而且每个机器可以用多次。第一次执行的机器不消耗转移时间K。用dp[i][j]表示第i个机器完成第j个步骤的最短时间,sum[j][i]表示第i个机器完成前j个步骤的时间。比较容易想到一个朴素的状态转移方程:dp[i][j]=min{dp...
分类:
其他好文 时间:
2014-06-02 19:48:58
阅读次数:
261
http://poj.org/problem?id=3071概率dp,dp[i][j]表示第i次比赛,第j支队伍胜出的概率。 1 #include 2
#include 3 #include 4 #define maxn 1000 5 using namespace std; 6 7 dou...
分类:
其他好文 时间:
2014-06-02 19:10:37
阅读次数:
251
TSP问题目前有多种解法:搜索解法,动归解法,启发式解法。这里就针对poj 3311问题给出了前两种解法。
搜索解法:这种解法其实就是计算排列子集树的过程。从0点出发,要求遍历1,2,3点后回到0点。以不同的顺序来依次遍历1,2,3点就会导出不同的路径(0->1->2->3->0;0->1->3->2->0等等),总共有3!=6条路径需要考虑,从中选出最短的那条就是所求。搜索解法的时间复杂度为O(n!)。
动归解法:仔细观察搜索解法的过程,其实是有很多重复计算的。比如从0点出发,经过1,2,3,4,5点后回...
分类:
其他好文 时间:
2014-06-02 19:02:01
阅读次数:
436
题意:求区间内不含62和4的数的个数;
解法:数位dp。int dfs(int pos,int pre,bool limit,bool have),pos表示dp到的数位位置,pre表示前一个数位的数字,limit表示到此时数是否有下降(此位取数字是否受限制的意思),have表示之前是否有62;4的排除是靠在每次枚举下一位i时不取4即可;每个case的dp值都是一样的,所以只需要计算一遍...
分类:
其他好文 时间:
2014-06-02 18:59:28
阅读次数:
315
昨天打 CF又跪了,最近睡不好睡不好睡不好~感觉整个人都累傻了,根本无办法写下去,仅仅写了一题签到题就跪了orz..从未试过这么悲剧。
今天早上凭着我的意念(“怨念”),七点又起来了!我已经连续好多天七点自动起来(不是自然醒,是意念,是意念....),刷啊刷啊刷dp.
今天刷的是昨天的加强版,实际上就多了一个for循环,和做高度处理,不直到是不是正解( ╮(╯▽╰)╭ ),但是AC就好了.....
分类:
其他好文 时间:
2014-06-02 10:59:50
阅读次数:
220
UVA 10844 - Bloques
题目链接
题意:给定n个数字,问这n个数字能分成子集分成有几种分法
思路:一开始先想了个状态,dp[i][j]表示放i个数字,分成j个集合的方案,那么转移为,从dp[i - 1][j - 1]在多一个集合,和从dp[i - 1][j]有j个位置放,那么转移方程为dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]...
分类:
其他好文 时间:
2014-06-02 05:29:09
阅读次数:
254
A.Another Recurrence Sequence
B.Gears
题目大意:有n个齿轮,一开始各自为一组,之后进行m次操作,包括以下4种类型:
1.合并两组齿轮,合并的两个应该反向旋转
2.把某个齿轮从所在组删除,自为一组,但不影响同组其它齿轮的状态与关系
3.询问两个齿轮是同向、反向或无关系(即不在同一组)
4.询问某个齿轮所在组的齿轮总数
分析:...
分类:
其他好文 时间:
2014-06-02 04:44:36
阅读次数:
301
题意:有A,B两个人,n道题目,每题有对应的分数,B答对题目的概率是0.5,求A不输给B的概率不小于P要拿的最低分数
思路:DP,dp[i][j]来表示B答了前i题后分数为j的概率,,然后通过B的概率求A的最低分数#include
#include
#include
#include
using namespace std;
const int MAXN = 40010;
int a[...
分类:
其他好文 时间:
2014-06-02 02:25:20
阅读次数:
243