POJ 3056 The Bavarian Beer Party (区间DP)

原创 2016年08月30日 20:08:18

The Bavarian Beer Party
Time Limit: 6000MS Memory Limit: 65536K
Total Submissions: 1055 Accepted: 395
Description

The professors of the Bayerische Mathematiker Verein have their annual party in the local Biergarten. They are sitting at a round table each with his own pint of beer. As a ceremony each professor raises his pint and toasts one of the other guests in such a way that no arms cross.

Figure 2: Toasting across a table with eight persons:no arms crossing(left), arms crossing(right)

We know that the professors like to toast with someone that is drinking the same brand of beer, and we like to maximize the number of pairs of professors toasting with the same brand , again without crossing arms. Write an algorithm to do this, keeping in mind that every professor should take part in the toasting.
Input

The frist line of the input contains a single number: the number of test cases to follow. Each test case has the following format:
One line with an even number p, satisfying 2 <= p <= 1000: the number of participants
One line with p integers (separated by single spaces) indicating the beer brands fro the consecutive professors( in clockwise order, starting at an arbitrary position). Each value is between 1 and 100 (boudaries included).
Output

For every test case in the input, the output should contain a single number on a single line: the maximum number of non-intersecting toasts of the same beer brand for this test case.
Sample Input

2
6
1 2 2 1 3 3
22
1 7 1 2 4 2 4 9 1 1 9 4 5 9 4 5 6 9 2 1 2 9
Sample Output

3
6
Source

The 2006 Benelux Algorithm Programming Contest

有偶数个人,所有人都必须互相敬酒,而且不能交叉,问在这种情况下,互相敬酒的人牌子相同的最大对数

为了保证一个区间内不想交,首先要保证这个区间的人数必须是偶数,如果区间人数是是奇数,那必定会存在交叉情况。那么在区间DP的时候中间值K也必须保证是2的倍数。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int a[1005];
int dp[1005][1005];

int main()
{
    int t;
    scanf("%d",&t);
    while( t-- )
    {
        int n;
        scanf("%d",&n);
        for( int i = 1; i <= n; i++ )
            scanf("%d",&a[i]);
        memset(dp,0,sizeof(dp));
        for( int len = 2; len <= n; len+= 2 )
        {
            for( int i = 1; i + len - 1 <= n; i++ )
            {
                int j = i + len - 1;
                dp[i][j] = dp[i+1][j-1];
                if( a[i] == a[j] )
                    dp[i][j] += 1;
                for( int k = i+1; k < j; k += 2  )
                    dp[i][j] = max( dp[i][j],dp[i][k]+dp[k+1][j]);
            }
        }
        printf("%d\n",dp[1][n]);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

【动态规划DP,二维动归】poj1651,Multiplication Puzzle

http://poj.org/problem?id=1651 有N张写有数字的卡片排成一行,按一定次序从中拿走N-2张(第1张和最后一张不能拿),每次只拿一张,取走一张卡片的同时,会得到一个...
  • mmc2015
  • mmc2015
  • 2015年08月06日 19:46
  • 1408

状态压缩dp入门 (poj3254 Corn Fields)

题目链接:http://poj.org/problem?id=3254 题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多...
  • y990041769
  • y990041769
  • 2014年04月28日 19:10
  • 18967

POJ-DP题目列表【开启疯狗模式】

转载请注明出处:http://blog.csdn.net/a1dark DP是大伤、终于找到一份可以狂刷的清单、那便战个痛! 列表一:经典题目题号: 容易:  1018, 1050, ...
  • verticallimit
  • verticallimit
  • 2013年12月04日 11:05
  • 1938

poj 3056 The Bavarian Beer Party (区间dp)

题目要求 求最大匹配,但是不能敬酒的人手交叉。这题理解不深,不过要注意的是枚举的长度每次长度都是两倍增长 状态返程: dp[i][j] = dp[i+1][j-1] + (a[i]==b[j])  如...
  • My_ACM_Dream
  • My_ACM_Dream
  • 2014年12月01日 10:52
  • 519

POJ3056:The Bavarian Beer Party(区间DP)

Description The professors of the Bayerische Mathematiker Verein have their annual party in the loc...
  • libin56842
  • libin56842
  • 2013年08月03日 16:34
  • 1467

POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)

POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
  • Tc_To_Top
  • Tc_To_Top
  • 2015年07月22日 11:22
  • 680

POJ3342 Party at Hali-Bula(树型DP求最大独立集+唯一解判断)

题意: 公司参加聚会,要求员工不能和他的上司同时参加,求最多能参加几个人并且判断解是否唯一。 要点: 树型DP的经典题,用dp[u][1]表示选取u的最大值,dp[u][0]表示不选取u的最大值...
  • SeasonJoe
  • SeasonJoe
  • 2016年05月31日 09:23
  • 299

poj 2342 Anniversary party 简单的DP

题目:poj 2342 Anniversary party  我想说的:由于是在树上进行的dp,所以在网上搜树型DP的时候,就搜到了,结果感觉题目很水,不过为了保证周题数量,就做了吧。不过不知道为什...
  • jiang199235jiangJJ
  • jiang199235jiangJJ
  • 2012年07月26日 11:35
  • 1021

HDU2412 & POJ3342 Party at Hali-Bula_树形DP

原题: Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...
  • u011343989
  • u011343989
  • 2014年02月19日 15:31
  • 505

POJ 2342 Anniversary party(树形dp)

题目链接: POJ 2342 Anniversary party 题意: 有nn个人要去参加聚会,每个人都不想和他的直接上属出现,给出每个人的从属关系,每个人会有convivialitycon...
  • Ramay7
  • Ramay7
  • 2016年07月30日 17:45
  • 203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 3056 The Bavarian Beer Party (区间DP)
举报原因:
原因补充:

(最多只允许输入30个字)