BZOJ4580: [Usaco2016 Open]248

Posted Blue233333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ4580: [Usaco2016 Open]248相关的知识,希望对你有一定的参考价值。

n<=248个数字,可以进行这样的操作:将相邻两个相同的数字合并成这个数字+1,求最大能合成多少。

f(i,j)--区间i到j能合成的最大值,f(i,j)=max(f(i,k)+1),f(i,k)=f(k+1,j)。

技术分享
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<stdlib.h>
 5 #include<math.h>
 6 //#include<iostream>
 7 using namespace std;
 8  
 9 int n;
10 #define maxn 311
11 int f[maxn][maxn];
12 int main()
13 {
14     scanf("%d",&n);
15     int ans=0;
16     for (int i=1;i<=n;i++) scanf("%d",&f[i][i]),ans=max(ans,f[i][i]);
17     for (int len=1;len<n;len++)
18         for (int i=1,j=i+len;j<=n;i++,j++)
19         {
20             f[i][j]=-1;
21             for (int k=i;k<j;k++)
22                 if (f[i][k]==f[k+1][j]) f[i][j]=max(f[i][j],f[i][k]+1);
23             ans=max(ans,f[i][j]);
24         }
25     printf("%d\n",ans);
26     return 0;
27 }
View Code

 

以上是关于BZOJ4580: [Usaco2016 Open]248的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 4576: [Usaco2016 Open]262144

bzoj4576Usaco2016 Open262144

Bzoj 4582 [Usaco2016 Open] Diamond Collector 题解

BZOJ 4579: [Usaco2016 Open]Closing the Farm

BZOJ 4582 [Usaco2016 Open]Diamond Collector

BZOJ 4582: [Usaco2016 Open]Diamond Collector