【poj 3056】The Bavarian Beer Party (区间DP+最大匹配不交叉的简单算法)
来源:互联网 发布:淘宝发布图片规则 编辑:程序博客网 时间:2024/06/08 17:45
题目大意:一组数按照顺时针排列,数值相同的两个位置可以连一条线,最终线与线不交叉的最大数量为多少。
这道题目是求最大匹配的题目,初学区间DP,脑子一片空白,仅仅记下来,以供之后温习。
按照区间的想法可以很容易的得到,dp[i][j]所存的是i到j当中满足条件的最大数值,那么有dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]);
这个是解决在i到j区间当中有两部分连线互相不包含也不想交,则最大值便是两者相交。
但这种方法没办法解决两头可以相连的情况,这是最基础的情况,所以在一开始便有dp[i][j]=dp[i+1][j-1]+(a[i]==a[j]);
AC代码:
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int a[1100];int dp[1100][1100];int main(){int t;cin >> t;while (t--){int n;cin >> n;for (int i = 1; i <= n; i++){scanf("%d", &a[i]);dp[i][i] = 0;}for (int i = 1; i <= n; i+=2)for (int j = 1; j+i<=n;j++){int end = j + i;dp[j][end] = dp[j + 1][end - 1] + (a[j] == a[end]);for (int k = j; k < end; k++)//解决不是回文结构,即两部分加起来dp[j][end] = max(dp[j][end], dp[j][k] + dp[k + 1][end]);}cout << dp[1][n] << endl;}}
0 0
- 【poj 3056】The Bavarian Beer Party (区间DP+最大匹配不交叉的简单算法)
- poj 3056 The Bavarian Beer Party (区间DP)
- POJ 3056 The Bavarian Beer Party (区间DP)
- poj 3056 The Bavarian Beer Party (区间dp)
- POJ3056:The Bavarian Beer Party(区间DP)
- POJ3056:The Bavarian Beer Party(区间DP)
- poj3056The Bavarian Beer Party(区间dp)
- POJ 3056 The Bavarian Beer Party 笔记
- poj3056The Bavarian Beer Party (不交差配对,区间DP)
- POJ3056The Bavarian Beer Party题解动态规划DP
- (POJ 2955)Brackets 区间DP 最大括号匹配
- POJ 2955 Brackets(括号最大匹配,区间DP)
- poj-2955 括号匹配--简单区间dp
- poj 2342 Anniversary party 简单的DP
- 括号最大匹配(区间dp)
- poj 2955 区间dp 最大括号匹配数
- poj 2955 区间dp(括号匹配)
- POJ 1163 The Triangle (简单 DP 数字的最大路线和)
- PAT 1010. 一元多项式求导 (25)
- Mysql关键字 Mysql保留字列表 Mysql字段名
- UVa 10935 - Throwing cards away I
- 杂记asla-lib库函数snd_pcm_open打开流程
- Vivado开发工具熟悉之IP Intergrator(Generate Block Design)
- 【poj 3056】The Bavarian Beer Party (区间DP+最大匹配不交叉的简单算法)
- php文件之间相互引用路径问题的一般处理方法
- struts集成restful
- Device namespace简介 - 基于Kernel namespace的设备虚拟化
- 关于CPoint的初始化与赋值
- 后缀数组(至少重复k次的可重叠的最长重复子串)—— POJ 3882
- u-boot.lds文件诠释
- Python mysql操作【转】
- 国外程序员整理的 C++ 资源大全