自己看之区间DP
//菜鸡制作,看的时候可能三目运算符略烦;;;
区间DP入门题:Brackets
地址:http://59.77.139.92/Problem.jsp?pid=1463
分析(对区间DP的代码原理进行分步解析):
for(k=; k<L; k++)
{
for(i=, j=k; j<L; i++, j++)
{
if(s[i]=='['&&s[j]==']'||s[i]=='('&&s[j]==')')
dp[i][j]=dp[i+][j-]+;
for(x=i; x<j; x++)
dp[i][j]=max(dp[i][j], dp[i][x]+dp[x+][j]);
}
}
样例:()()()
变量是一一对应的应该;
区间DP原理就可以理清楚了。
然后我们看一下这题:刺激的摩托飞艇
地址:http://59.77.139.92/Problem.jsp?pid=2382
这一题求最小拆除路线实际上就是求最大不相交路线的数量, 也就是和上面那一题一模一样,但是这一题变通的地方在于dp数组一开始就要赋值,相连则dp[i][j]=1, 其他的地方完全可以照搬
#include<stdio.h>
#define max(a, b) a>b?a:b
int n, i, j, k, l, dp[][], a;
int main( )
{
scanf("%d", &n);
while(n--)
scanf("%d%d", &j, &k), j>k?dp[k][j]=:dp[j][k]=;
for(k=, n=; k<n; k++)
for(i=, j=k; j<n; j++, i++)
{
for(l=i+, a=; l<j; l++)
a=max(a, dp[i][l]+dp[l][j]);
dp[i][j]+=a;
}
printf("%d\n", dp[][]);
}
例三:石子合并
地址:http://59.77.139.92/Problem.jsp?pid=2385
这一题的区别点就是石子是环状的,那么我们就可以简单的对数组进行延长操作来求, 其他核心基本上不变
#include<stdio.h>
#define min(a, b) a<b?a:b
int dp[][], i, j, k, l, n, a[], sum[];
int main( )
{
scanf("%d", &n);
for(i=; i<n; i++)
scanf("%d", &a[i]), i?sum[i]=a[i]+sum[i-]:sum[i]=a[i];///sum数组记录前缀和
for(i=n; i<*n; i++)
a[i]=a[i-n], sum[i]=sum[i-]+a[i];///增长
for(k=; k<n; k++)
for(i=, j=k; j<*n; i++, j++)
for(l=i, dp[i][j]=0x3f3f3f; l<j; l++)
dp[i][j]=min(dp[i][j], dp[i][l]+dp[l+][j]+sum[j]-sum[i-]);
for(i=, j=0x3f3f3f; i<n; i++)
if(j>dp[i][i+n-]&&dp[i][i+n-])
j=dp[i][i+n-];
printf("%d\n", j);
}
自己看之区间DP的更多相关文章
- qscoj 喵哈哈村的打印机游戏 区间dp
点这里去看题 区间dp ,dp[l][r][d]代表从l到r的区间底色为d,具体看代码 第一次见到区间dp...两个小时对着敲了五遍终于自己敲懂了一遍ac #include<bits/stdc+ ...
- BZOJ4856 JSOI2016 病毒感染 区间DP
传送门 原Word文档 题意:太长不给 这种题目一看就是区间DP 设$f_i$表示治愈了前$i$个村子的时候最少死了多少村民,又设前缀和为$sum_i$,通过枚举折返时最后经过的村子$j$,并且提前计 ...
- 洛谷1063 +区间dp(经典问题)
题目网址:https://www.luogu.com.cn/problem/P1063 题意大致是:给定一个序列An,第i个元组表示为(Ai,Ai+1),序列位置不变,当合并一个区间[l,l+1]时开 ...
- 区间dp暂时的理解
因为刚刚看了区间dp,所以写一下对区间dp的理解. 例题: 石子归并 51Nod - 1021 看了一篇博客,觉得他说得比较容易理解,所以再次重复一遍: 假如你是上帝,已经知道了1~n堆石子的最优解, ...
- 【BZOJ-4380】Myjnie 区间DP
4380: [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 162 Solved: ...
- 区间dp总结篇
前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...
- light oj 1422 Halloween Costumes (区间dp)
题目链接:http://vjudge.net/contest/141291#problem/D 题意:有n个地方,每个地方要穿一种衣服,衣服可以嵌套穿,一旦脱下的衣服不能再穿,除非穿同样的一件新的,问 ...
- hdu2476 String painter(区间dp)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 Problem Description There are two strings ...
- LightOJ1033 Generating Palindromes(区间DP/LCS)
题目要计算一个字符串最少添加几个字符使其成为回文串. 一年多前,我LCS这道经典DP例题看得还一知半解时遇到一样的问题,http://acm.fafu.edu.cn/problem.php?id=10 ...
随机推荐
- 从装饰者模式的理解说JAVA的IO包
1. 装饰者模式的详解 装饰者模式动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性 的替代方案. 装饰者模式设计类之间的关系: 其 中Component是一个超类,ConcreteC ...
- android studio 运行太慢了
Android Studio每次升级/安装 Android Studio 之后最好都修改一下这个参数:到 Android Studio 安装目录,找到 bin/studio(64?).vmoption ...
- HDU4045_Machine scheduling
题意为要你从编号为1-n的所有机器中间选择出r个机器且每一个机器的编号只差不小于k-1,然后将选择的r个机器分为m组有多少种方案. 其实这题目的两个步骤是相互独立的. 总共的方案数等于选择的方案数乘以 ...
- java 集合 父类的使用子类的方法时候 底层自动转型为子类的数据类型
跟继承多态不一样 继承多态需要显示转型
- 【bzoj2560】串珠子 状压dp+容斥原理
题目描述 有 $n$ 个点,点 $i$ 和点 $j$ 之间可以连 $0\sim c_{i,j}$ 条无向边.求连成一张无向连通图的方案数模 $10^9+7$ .两个方案不同,当且仅当:存在点对 $(i ...
- 【bzoj2351】[BeiJing2011]Matrix 二维Hash
题目描述 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过.所谓01矩阵,就是矩阵中所有元素不是0就是1. 输入 输入文件的第一行为M.N.A.B,参见 ...
- 【容斥原理,莫比乌斯反演】用容斥替代莫比乌斯反演第二种形式解决gcd统计问题
名字虽然很长.但是其实很简单,对于这一类问题基本上就是看你能不能把统计的公式搞出来(这时候需要一个会推公式的队友) 来源于某次cf的一道题,盼望上紫的我让潘学姐帮我代打一道题,她看了看跟我说了题解,用 ...
- 洛谷 P3648 [APIO2014]序列分割 解题报告
P3648 [APIO2014]序列分割 题目描述 你正在玩一个关于长度为\(n\)的非负整数序列的游戏.这个游戏中你需要把序列分成\(k+1\)个非空的块.为了得到\(k+1\)块,你需要重复下面的 ...
- Yura
Portal --> broken qwq Description 给你一个长度为\(n\)的序列\(a\)和一个正整数\(k\),求满足如下条件的区间\([l,r]\)的数量:\((\s ...
- Machine Learning in Action-chapter2-k近邻算法
一.numpy()函数 1.shape[]读取矩阵的长度 例: import numpy as np x = np.array([[1,2],[2,3],[3,4]]) print x.shape / ...