给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问序列中出现的最大数字的值最大是多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。
输入格式第一行包括一个正整数 N N N, 接下来 N N N 行给出
N N N 个正整数代表初始数字.
输出格式输出可以得到的最大值
样例 #1 样例输入 #14 1 1 1 2样例输出 #1
3
#include#include using namespace std; int f[251][251], a[251]; int n, k, ans = -1; int main() { int i, j; cin >> n; for (i = 1; i <= n; i++) { cin >> a[i]; f[i][i] = a[i]; } for (i = n - 1; i >= 1; i--) for (j = i + 1; j <= n; j++) for (k = i; k <= j - 1; k++) { if (f[i][k] == f[k + 1][j]) f[i][j] = max(f[k + 1][j] + 1, f[i][j]); ans = max(ans, f[i][j]); } cout << ans; }



