首页 > 其他 > 详细

CF607B

时间:2020-10-11 18:49:19      阅读:38      评论:0      收藏:0      [点我收藏+]

区间dp 注意len==2的特判问题

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstdio>
 5 #define INF 1e9
 6 using namespace std;
 7 const int maxn = 5e2 + 10;
 8 int n;
 9 int a[maxn];
10 int dp[maxn][maxn];
11 
12 int main(){
13     scanf("%d",&n);
14     for(int i = 1 ; i <= n ; i++){
15         for(int j = i ; j <= n ; j++){
16             dp[i][j] = INF;
17         }
18     }
19     for(int i = 1 ; i <= n ; i++){
20         scanf("%d",&a[i]);
21         dp[i][i] = 1;
22     }
23     for(int i = 1 ; i < n ; i++){
24         dp[i][i + 1] = a[i] == a[i + 1] ? 1 : 2;
25     }//若枚举len从2开始,dp[i+1][j-1]将无法被覆盖,因此需要特判 
26     for(int len = 3 ; len <= n ; len++){
27         for(int i = 1 ; i + len - 1 <= n ; i++){
28             int j = i + len - 1;
29             for(int k = i ; k <= j - 1 ; k++){
30                 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);
31             }
32             if(a[i] == a[j] && i + 1 <= j - 1)    dp[i][j] = min(dp[i][j], dp[i + 1][j - 1]);
33         }
34     }
35     printf("%d\n",dp[1][n]);
36     
37     return 0;
38 }

 

CF607B

原文:https://www.cnblogs.com/ecustlegendn324/p/13797896.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!