本文主要是介绍动态规划之方盒游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
状态是ClickBox( i , j , extralen)表示在大块 j 的右边已经有一个长度为 extralen 的大块,且其颜色与大块 j 相同,将大块 j 和大块 extralen 合并称为大块Q,在此情况下,将大块 i~j 以及大块 extralen 都能消除所得到的最高分。
整个问题就是求ClickBox( 1 , n , 0 )
状态转移方程:
1. 直接将Q删除,这种做法得到的最高分是
ClickBox( i , j , extralen ) = ClickBox( i , j-1 , 0 ) + (len[ j ] + extralen)^2;
2. 期待Q以后能和左边的某个同色大块合并。需要枚举可能和大块Q合并的同色大块。假设让大块k和大块Q合并
ClickBox( i , j , extralen ) = ClickBox( i , k , extralen + len[ j ] ) + ClickBox( k+1, j-1 , 0 )
递归终点是当 i = j 时, ClickBox( i , j , extralen ) = (len[ j ] + extralen) ^ 2
#include <iostream>
#include <memory.h>
#define MaxLen 205
using namespace std;
s
这篇关于动态规划之方盒游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!