日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【CodeForces - 608D】Zuma(区间dp)

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【CodeForces - 608D】Zuma(区间dp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題干:

Genos recently installed the game Zuma on his phone. In Zuma there exists a line of?n?gemstones, the?i-th of which has color?ci. The goal of the game is to destroy all the gemstones in the line as quickly as possible.

In one second, Genos is able to choose exactly one continuous substring of colored gemstones that is a palindrome and remove it from the line. After the substring is removed, the remaining gemstones shift to form a solid line again. What is the minimum number of seconds needed to destroy the entire line?

Let us remind, that the string (or substring) is called?palindrome, if it reads same backwards or forward. In our case this means the color of the first gemstone is equal to the color of the last one, the color of the second gemstone is equal to the color of the next to last and so on.

Input

The first line of input contains a single integer?n?(1?≤?n?≤?500)?— the number of gemstones.

The second line contains?n?space-separated integers, the?i-th of which is?ci?(1?≤?ci?≤?n)?— the color of the?i-th gemstone in a line.

Output

Print a single integer?— the minimum number of seconds needed to destroy the entire line.

Examples

Input

3 1 2 1

Output

1

Input

3 1 2 3

Output

3

Input

7 1 4 4 2 3 2 1

Output

2

Note

In the first sample, Genos can destroy the entire line in one second.

In the second sample, Genos can only destroy one gemstone at a time, so destroying three gemstones takes three seconds.

In the third sample, to achieve the optimal time of two seconds, destroy palindrome?4 4?first and then destroy palindrome?1 2 3 2 1.

題目大意:

? ?給一個數字串,如果是回文串就能相消(類似Zuma游戲),問你要想消除所有的數字,至少需要多少次操作。

解題報告:

? ?跟那道AtCoder - 4244很像,,直接遞推。

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5; const int INF = 0x3f3f3f3f; int a[MAX]; int dp[550][550]; int main() {int n;cin>>n;for(int i = 1; i<=n; i++) scanf("%d",a+i);memset(dp,INF,sizeof dp);for(int len = 1; len<=n; len++) {for(int l = 1; l<=n-len+1; l++) {int r = l+len-1;if(l == r) dp[l][l] = 1;if(r-l==1) dp[l][r] = 1+(a[l]!=a[r]);else {for(int k = l+1; k<=r; k++) dp[l][r] = min(dp[l][r] , dp[l][k-1] + dp[k][r]);if(a[l] == a[r]) dp[l][r] = min(dp[l][r],dp[l+1][r-1]);}}}printf("%d\n",dp[1][n]);return 0 ;}

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【CodeForces - 608D】Zuma(区间dp)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。