POJ 1141 区间DP】的更多相关文章

给一组小括号与中括号的序列,加入最少的字符,使该序列变为合法序列,输出该合法序列. dp[a][b]记录a-b区间内的最小值, mark[a][b]记录该区间的最小值怎样得到. #include "stdio.h" #include "string.h" int inf=99999999; char str[110]; int dp[110][110],mark[110][110]; void pri(int l,int r) { if (l>r) retur…
Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30383   Accepted: 8712   Special Judge Description Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular sequence. 2. If S is a re…
又几天没写博客了,大二的生活实在好忙碌啊,开了五门专业课,每周都是实验啊实验啊实验啊....我说要本月刷够60题,但好像完不成了,也就每天1题的样子.如今写动规还是挺有条理的,包括这道需要打印轨迹,其实就是在POJ 2955的基础上进行下修改,记录下动规的方向,再用递归逆向输出即可! 是个区间DP,如果 括号i和括号k匹配了,则 dp[i][j]=max(dp[i][j],dp[i][k]+1+dp[k+1][j])这个转移方程挺重要的,我一开始就是这个方程没写好..弄得思路混乱了 还有就是一开…
Cheapest Palindrome Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7869   Accepted: 3816 Description Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate it. He has installed on each cow a…
第一道自己做出来的区间dp题,兴奋ing,虽然说这题并不难. 从后向前考虑: 状态转移方程:dp[i][j]=dp[i+1][j](i<=j<len); dp[i][j]=Max(dp[i][j],dp[i+1][k-1]+dp[k+1][j]+1),(a[i]==a[j]&&i<len,j<len,k<len); #include<stdio.h> #include<string.h> #define N 300 int dp[N][…
题目链接: http://poj.org/problem?id=2955 题目大意:括号匹配.对称的括号匹配数量+2.问最大匹配数. 解题思路: 看起来像个区间问题. DP边界:无.区间间隔为0时,默认为memset为0即可. 对于dp[i][j],如果i和j匹配,不难有dp[i][j]=dp[i+1][j-1]+2. 然后枚举不属于两端的中点, dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]),合并两个区间的结果. #include "cstdio"…
题目链接: http://poj.org/problem?id=1651 题目大意:加分取牌.如果一张牌左右有牌则可以取出,分数为左牌*中牌*右牌.这样最后肯定还剩2张牌.求一个取牌顺序,使得加分最少. 解题思路: 矩阵链乘的变种题. 假设有10.20.30.40.50五张牌. 如果我想要最后取30,则应该先取20.40,这样就还剩10.30.50三张牌了. 不难发现取20是dp[i][k]部分,取40是dp[k][j]部分,最后剩下的就是i.k.j三张牌. DP边界:无 因为是算加分,区间间隔…
Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5035   Accepted: 2065 Description Some of you may have played a game called 'Blocks'. There are n blocks in a row, each box has a color. Here is an example: Gold, Silver, Silver, Sil…
此题可以转化为最优矩阵链乘的形式,d(i, j)表示区间[i, j]所能得到的最小权值. 枚举最后一个拿走的数a[k],状态转移方程为d(i, j) = min{ d(i, k) + d(k, j) + a[i] * a[k] * a[j] } #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; + ; const…
题意: 思路: f[i][j][1]表示从i到j的区间全都吃完了 现在在j点 变质期最小是多少 f[i][j][0]表示从i到j的区间全都吃完了 现在在i点 变质期最小是多少 f[i][j][0]=min(f[i+1][j][0]+(s[i+1]-s[i])(n-j+i),f[i+1][j][1]+(s[j]-s[i])(n-j+i)); f[i][j][1]=min(f[i][j-1][1]+(s[j]-s[j-1])(n-j+i),f[i][j-1][0]+(s[j]-s[i])(n-j+i…