题意:求一个环的最长回文序列,是序列不是串

链接:点我

起点是可以任意的,

所以只要求出每个区间的最长回文序列之后取max(dp[1][i]+dp[i+1][n]),即可得最终答案

本来是想扩展两倍的,但是后来的最大不太好想

  1. 将 环倍增成链,求出窗口为n的最长子序列,但这不是最终的解,你可以试看看Sample 2,是只能得出4,因为它在选中的回文外面还可以选中一个当做起点来跳,所以外面得判断找出来的回文外面是否还有可以当起点的石头,即可以找窗口为(n- 1)的长度+1。所以解即找 窗口为n的长度或者 窗口为(n-1)的长度+1 的最大值。

  2. 不倍增,直接当成一个链求dp,然后把链切成两半,求出两边的回文长度,最大的和就是解。这里不用考虑起点问题,因为两边的回文中点都可以做起点。

Sample Input

1
1
4
1 1 2 1
6
2 1 1 2 1 3
0Sample Output
1
4
5

2015-05-06 代码

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****\n");
15 const int MAXN=1005;
16 int n,m,tt;
17 int a[MAXN];
18 int dp[MAXN][MAXN];
19 int main()
20 {
21     int i,j,k;
22     #ifndef ONLINE_JUDGE
23     freopen("1.in","r",stdin);
24     #endif
25     while(scanf("%d",&n)!=EOF)
26     {
27         if(n==0)    break;
28         cl(dp);
29         for(i=0;i<n;i++)
30         {
31             scanf("%d",&a[i]);
32             dp[i][i]=1;
33         }
34         for(int len=1;len<n;len++)
35         {
36             for(i=0;i+len<n;i++)
37             {
38                 j=len+i;
39                 if(a[i]==a[j])  dp[i][j]=dp[i+1][j-1]+2;
40                 else dp[i][j]=max(dp[i][j-1],dp[i+1][j]);
41             }
42         }
43         int ans=0;
44         for(int i=0;i<n;i++)
45             ans=max(ans,dp[0][i]+dp[i+1][n-1]);
46         printf("%d\n",ans);
47     }
48 }

View Code

 

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 int dp[1001][1001];
 6 int a[1001];
 7 int n;
 8 int main()
 9 {
10     while(scanf("%d",&n)&&n)
11     {
12         for(int i=1;i<=n;i++)
13             scanf("%d",&a[i]);
14         memset(dp,0,sizeof(dp));
15         for(int i=1;i<=n;i++)
16             dp[i][i]=1;
17         for(int len=1;len<n;len++) {
18             for (int i=1;i+len<=n;i++) {
19                 int j=i+len;
20                 if(a[i]==a[j])
21                     dp[i][j]=dp[i+1][j-1]+2;
22                 else
23                     dp[i][j]=max(dp[i][j-1],dp[i+1][j]);
24             }
25         }
26         int ans=0;
27         for(int i=1;i<=n;i++)
28             ans=max(ans,dp[1][i]+dp[i+1][n]);
29         printf("%d\n",ans);
30     }
31     return 0;
32 }

转载于:https://www.cnblogs.com/cnblogs321114287/p/4265559.html

hdu 4745 区间dp相关推荐

  1. Palindrome subsequence HDU - 4632 区间dp|记忆化搜索

    // 区间dp import java.util.Scanner;/**** @author CN*/ public class main {static int mod = 10007;static ...

  2. The 2014 ACM-ICPC BeiJing D - Dire Wolf HDU - 5115 区间dp

    题意 n个狼 排成一排 我们要把一排狼都删除掉 删除一个狼的花费是这个狼的权值和左右两个狼的附加值 求最小花费 分析 考虑区间dp dp[i][j]表示i到j的最小花费 我们可以枚举其中的k 为序列中 ...

  3. hdu 2476 区间dp

    题意: 给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2 例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10 先将0~10刷一次,变成aaaaaaaaaaa 1~ ...

  4. You Are the One HDU - 4283 区间DP

    https://cn.vjudge.net/problem/HDU-4283 题目大意n个人轮流上台,第i个人有一个屌丝值Di 当他为第k个上台的人时候会获得屌丝值(K-1)*Di, 这些人轮流上台, ...

  5. hdu 5115 区间dp 狼BUFF

    题目大意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼 ...

  6. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  7. HDU 5693 D Game 区间dp

    D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...

  8. HDU 2476 String painter (区间DP)

    题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...

  9. hdu 4597 + uva 10891(一类区间dp)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...

最新文章

  1. 二叉树的高度-递归-JS实现
  2. SharePoint Adventures : Using Claims with Reporting Services
  3. DDoS攻防战 (二) :CC攻击工具实现与防御理论
  4. 【SCOI2005】【BZOJ1087】互不侵犯King(状压dp)
  5. ​【文末有福利】《信条》中的物理学-时间机器存在吗?
  6. ie6+7+8等对background-color:rgba(),background-img渐变的兼容
  7. 中国电信披露2021年年报 天翼云营收实现三位数增长
  8. Connect By在10g中得增强, nocycle关键字等
  9. 开关电源磁性元件设计
  10. 专业音频测试软件应用比对,(精品文献)专业音频测试软件应用比对(升级版)_汤磊.pdf...
  11. Wi-Fi连接握手包抓包
  12. kettle连接access问题总结
  13. 在python中datetime使用中如何识别上月同期日期
  14. 抱歉,当前存在网络问题或服务器繁忙错误代码:20003问题解决方法
  15. JAVA学习内容汇总(一)
  16. element的el-table列标题添加自定义图标
  17. 二手行业能找回“消失的五年”吗?
  18. Python学习十四:访问列表元素、遍历列表
  19. 项目5 子域的加入、域的删除
  20. px4_simple_app

热门文章

  1. 【数据结构基础整理】图--06:克鲁斯卡尔算法详解
  2. mysql5.1 优化_7. 优化 - [ MySQL 5.1参考手册 ] - 在线原生手册 - php中文网
  3. 大学计算机基础模拟试题
  4. html a标签触发不了onclick()事件
  5. vue-router 源码和动态路由权限分配
  6. 茴字的四种写法—移动适配方案的进化
  7. 我看“暴风影音”事件
  8. DDD话语评价之二:“值对象”是DDD的创新吗(上)
  9. HLS ARRAY_PARTITION
  10. 嵌入式开发常用英语单词--你知多少?