p3698
方塊消除
時間限制 :
- ms 空間限制 :
65536 kb
評測說明 : 時限1000ms
問題描述
有n個帶顏色的方塊排成一排,相同顏色的方塊連成一段同色區域,如下圖所示:
遊戲時,玩家可以任選一段同色區域,將其消去。設消去的這段包含x個相同顏色的方塊,則此次消除操作的得分為x^2。然後右邊的所有方塊會往左邊合攏。
如下圖所示:
第一步將白色一段消除,得分16;
第二步將褐色一段消除,得分9;
第三步將橙色一段消除,得分4;
總分29
你的任務是對於給定的一排方塊,計算消除它們能得到的最大得分。
輸入格式
第一行,乙個整數n
第二行,描述初始狀態的一排方塊,由n個空格間隔的整數表示,每個整數表示一種顏色。整數的範圍在[1,n]
輸出格式
一行,乙個整數,表示最大得分
樣例輸入 1
91 2 2 2 2 3 3 3 1
樣例輸出 129
樣例輸入 2
81 2 2 3 1 3 2 1
樣例輸出 218
提示 1<=n<=200
#include#include#include#include#includeusing namespace std;
int n;
int f[205][205][205];
bool mark[205][205][205];
int a[205];
int dp(int l,int r,int k){
if(l>r)return 0;
if(mark[l][r][k])return f[l][r][k];
mark[l][r][k]=true;
if(l==r)return f[l][r][k]=(1+k)*(1+k);
int i,j,p=r,q;
while(a[p]==a[r])p--;
p++;
f[l][r][k]=max(f[l][r][k],dp(l,p-1,0)+(r-p+1+k)*(r-p+1+k));
for(q=l;q>n;
for(i=1;i<=n;i++)cin>>a[i];
for(i=0;i<=n;i++)f[i][i][0]=1;
cout<
記憶化搜尋專題 nkoj3748玩具取名
p3748 玩具取名 時間限制 ms 空間限制 65536 kb 評測說明 時限1000ms 問題描述 某人有一套玩具,並想法給玩具命名。首先他選擇wing四個字母中的任意乙個字母作為玩具的基本名字。然後他會根據自己的喜好,將名字中任意乙個字母用 wing 中任意兩個字母代替,使得自己的名字能夠擴充...
記憶化搜尋專題
0.前言 有些時候樸素深蒐會出現超時情況,所以誕生出一種記憶化搜尋的dfs,其實它也是dfs,只不過在dfs的過程中,新增了賦值的過程,這個賦值的過程就叫做記憶。這裡面會根據一些題目來講解記憶化搜尋。1.樣例分析 1.1 題目 絡谷 p1434滑雪 1.2分析 1.3 include using n...
記憶化搜尋
演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...