Description

一个序列,每次可以把相邻的两个数合为一个,价值+1,求最后的最大价值.

Sol

区间DP.

\(f[i][j]\) 表示 \(i-j\) 中合成一个数字为多少,转移就是枚举断点,断点两边的价值一样,就合并.

复杂度 \(O(n^3)\)

Code

/**************************************************************
Problem: 4580
User: BeiYu
Language: C++
Result: Accepted
Time:308 ms
Memory:1544 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; const int N = 255;
const int M = 50; int n,ans;
int a[N];
int f[N][N]; inline int in(int x=0){ scanf("%d",&x);return x; }
int DFS(int l,int r){
if(l == r) return f[l][r]=a[l];
if(~f[l][r]) return f[l][r];
f[l][r]=0;
for(int i=l;i<r;i++){
int x=DFS(l,i),y=DFS(i+1,r);
if(x!=0 && y!=0 && x == y) f[l][r]=max(f[l][r],x+1);
}ans=max(ans,f[l][r]);return f[l][r];
}
int main(){
n=in();
for(int i=1;i<=n;i++) a[i]=in(),ans=max(ans,a[i]); memset(f,0xff,sizeof(f)); for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) DFS(i,j); // for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) cout<<i<<" "<<j<<" "<<DFS(i,j)<<endl; cout<<ans<<endl;
return 0;
}

  

BZOJ 4580: [Usaco2016 Open]248的更多相关文章

  1. 4580: [Usaco2016 Open]248

    Description Bessie likes downloading games to play on her cell phone, even though she does find the ...

  2. BZOJ 4576: [Usaco2016 Open]262144

    Description 一个序列,每次可以将两个相同的数合成一个数,价值+1,求最后最大价值 \(n \leqslant 262144\) Sol DP. 这道题是 BZOJ 4580: [Usaco ...

  3. bzoj4580: [Usaco2016 Open]248(区间dp)

    4580: [Usaco2016 Open]248 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 255  Solved: 204[Submit][S ...

  4. 【BZOJ 4580】【Usaco2016 Open】248

    http://www.lydsy.com/JudgeOnline/problem.php?id=4580 区间dp,f(i,j)表示区间[i,j]全部合成一个数,这个数是多少. 可以归纳证明[i,j] ...

  5. BZOJ 4742: [Usaco2016 Dec]Team Building

    4742: [Usaco2016 Dec]Team Building Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 21  Solved: 16[Su ...

  6. 【bzoj4580】[Usaco2016 Open]248 区间dp

    题目描述 Bessie likes downloading games to play on her cell phone, even though she does find the small t ...

  7. bzoj 4506: [Usaco2016 Jan]Fort Moo

    4506: [Usaco2016 Jan]Fort Moo Description Bessie is building a fort with her friend Elsie. Like any ...

  8. bzoj 4412: [Usaco2016 Feb]Circular Barn

    4412: [Usaco2016 Feb]Circular Barn Description 有一个N个点的环,相邻两个点距离是1.点顺时针标号为1..N.每一个点有ci头牛,保证∑ci=N.每头牛都 ...

  9. BZOJ4580: [Usaco2016 Open]248

    n<=248个数字,可以进行这样的操作:将相邻两个相同的数字合并成这个数字+1,求最大能合成多少. f(i,j)--区间i到j能合成的最大值,f(i,j)=max(f(i,k)+1),f(i,k ...

随机推荐

  1. C# 文件操作大全

    1.创建文件夹//using System.IO;Directory.CreateDirectory(%%1); 2.创建文件//using System.IO;File.Create(%%1); 3 ...

  2. Runner之记计帐项目的典型用户和用户场景

    项目任务:编写日历选择界面和查明细界面(查看某一天的具体收支出状况) 1.背景 ①典型用户 (1)姓名:张云 (2)年龄:17~23 (3)收入:家长给的生活费与自己兼职(1500元/月) (4)代表 ...

  3. activity栈的关系

    android:intent flags 一.Activity和Task(栈)的关系 Task就像一个容器,而Activity就相当与填充这个容器的东西,第一个东西(Activity)则会处于最下面, ...

  4. hdu 1318 Palindromes

    Palindromes Time Limit:3000MS     Memory Limit:0KB     64bit                                         ...

  5. td:first-child 伪类 匹配第一个 匹配第一个 <td> 元素

    css代码: td:first-child{border-right: 1px solid #d9dbdd; } 备注:在下面的例子中,选择器匹配作为任何元素的第一个子元素的 p 元素: 链接:htt ...

  6. Python 开发与测试 Webservice(SOAP)

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理解WebService 1.从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是 ...

  7. 安装docker管理工具rancher

    http://blog.csdn.net/freewebsys/article/details/51136562 docker(2):安装docker管理工具rancher rancher是一个Doc ...

  8. 使用commons-fileupload包进行大文件上传注意事项

    项目中使用 commons-fileupload-1.2.1.jar 进行大文件上传. 测试了一把,效果很不错. 总结如下: 必须设置好上传文件的最大阀值 final long MAX_SIZE = ...

  9. OC-点语法

    点语法的本质:方法调用 #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, ...

  10. 开源项目管理平台*redmine*的架设

    yum -y install ruby yum install rubygems gem install heroku gem install rack -v=1.0.1 gem install ru ...