P3147 [USACO16OPEN]262144 P

题面

Bessie喜欢在手机上下游戏玩(……),然而她蹄子太大,很难在小小的手机屏幕上面操作。

她被她最近玩的一款游戏迷住了,游戏一开始有n个正整数,(2<=n<=262144),范围在1-40。在一步中,贝西可以选相邻的两个相同的数,然后合并成一个比原来的大一的数(例如两个7合并成一个8),目标是使得最大的数最大,请帮助Bessie来求最大值。

分析

本题水。

DP方程为:\(f[i][j]=f[i-1][f[i-1][j]]\) 注意特判 \(0\) 。

然后边界条件为 \(f[A_i][i]=i+1\)。

代码

#include <bits/stdc++.h>
using namespace std;

int n;
int result;
int f[61][262150];

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int tmp;
		cin>>tmp;
		f[tmp][i]=i+1;
	}
	for(int i=2;i<=60;i++){
		for(int j=1;j<=n;j++){
			if(!f[i][j]){
				f[i][j]=f[i-1][f[i-1][j]]; // jianzhi
			}
			if(f[i][j]){
				result=i;
			}
		}
	}
	cout<<result<<endl;
	return 0;
}
上一篇:c++ curl 登陆renren.com (cookie的使用)<转>


下一篇:springboot配置mybatis-generator-config