区间dp-hdu-4745-Two Rabbits

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4745

题目意思:

给n个环状的数,A、B两人沿相反的方向走,每单位时间走一步,要求相同时间两人到达相同的数,且同一位置同一个人不能走两次,走过的位置不能越过。

解题思路:

根据回文非连续序列的性质,从前往后,和从后往前序列是一样的,所以只用求出区间内最长的回文序列即可,又由于是环状,所以分成两部分,1~i i+1~n,A可以从i走到1,然后从n走到i+1,B可以从1走到i,从i+1走到n .

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#define eps 1e-6
#define INF 0x3fffffff
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

#define Maxn 1100
int sa[Maxn];
int dp[Maxn][Maxn];

int main()
{
   //freopen("in.txt","r",stdin);
   //freopen("out.txt","w",stdout);
   int n;

   while(scanf("%d",&n)&&n)
   {
       memset(dp,0,sizeof(dp));
       for(int i=1;i<=n;i++)
       {
           scanf("%d",&sa[i]);
           dp[i][i]=1;
       }
       for(int i=2;i<=n;i++)
       {
           for(int j=1;j+i-1<=n;j++)
           {
               int k=i+j-1;
               dp[j][k]=max(dp[j][k],max(dp[j+1][k],dp[j][k-1]));
               if(sa[j]==sa[k])
                    dp[j][k]=max(dp[j][k],dp[j+1][k-1]+2);
           }
       }
       int ans=0;
       for(int i=1;i<=n;i++)
            ans=max(ans,dp[1][i]+dp[i+1][n]);
        printf("%d\n",ans);

   }
   return 0;
}


动态规划之作业调度算法题解 假设有一台机器,以及在此机器上处理的n个作业a1,a2,...an的集合。每隔作业aj有一个处理时间tj,效益pj,以及最后期限dj。机器在一个时刻只能处理一个作业,而且作业aj必须在tj连续时间单位内不间断地运行。如果作业aj在最后期限dj之前完成,则获得效益pj,但如果在最后期限之后才完成,则没有效益。请给出一个动态规划算法,来寻找能获得最大量效益的调度,假设所有的处理时间都是1到n之间的整。分析你的算法的执行时间 立即下载

相关推荐

【2017特长生】摆渡线路【区间DP

区间DP

ssllyr 135

HDU-4745 Two Rabbits区间DP

题意:在n个石头围成的环上,只兔子一只顺时针跳,一只逆时针跳。它们首先各选一个重量相同的石头,再跳的时候可以跨过石头,但不能跳上或跨过已经跳过的石头。只兔子同时跳到的石头的重量必须相同,且它们可以同时跳到一个石头上。求若满足上述规则,最多可以进行几轮。(n&lt;=1000)在环上的问题,很容易想到破环成链开组,虽然这题也可以这样做,但常偏大。由于是环形的问题,我们可以让第一只兔子跳的...

Paulliant的博客 431

摆渡线路

Description 某市的M公园中有一个近乎圆形的湖,有100个主要景点分布在湖边,为了方便游客,公园在一些景点之间开设了直通的摩托飞艇摆渡的项目一来减少游客在景点到景点之间所花的时间,二来也可以让游客体验一下惊险刺激的摩托飞艇。果然摩托飞艇摆渡项目大为成功,为了充分满足游客需要,摆渡线路越来越多。不料随着线路的增加,危险性也随之增加。如果个摆渡线路之间有交叉(如上图),在这个线路上的飞艇...

Beautiful women in tights 473

区间DP】摆渡线路

摆渡线路摆渡线路摆渡线路 题目 某市的 M 公园中有一个近乎圆形的湖,有100 个主要景点分布在湖边,为了方便游客,公园在一些景点之间开设了直通的摩托飞艇摆渡的项目一来减少游客在景点到景点之间所花的时间,二来也可以让游客体验一下惊险刺激的摩托飞艇 果然摩托飞艇摆渡项目大为成功,为了充分满足游客需要,摆渡线路越来越多。不料随着线路的增加,危险性也随之增加。如果个摆渡线路之间有交叉(如上图),在这个线路上的飞艇一旦发生碰撞,后果将不堪设想 公园的管理层近日做出决定,本着安全第一的原则,在这个湖上取消一些线

CW. 259

hdu 4745 Two Rabbits 区间dp

Two Rabbits Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 2845Accepted Submission(s): 1484 Problem Description Long long ago, there li...

weixin_30652879的博客 140

HDU 4745 Two Rabbits 区间DP

题目描述:Description Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon, they planned to play a game with some stones. There were n stones on the ground and they were

喵头鹰的博客 837

HDU4745 Two Rabbits区间DP

题目链接:HDU4745 Two Rabbits 题意:有一段环形字符串,相对而行,要使得他们过的字母序列相同的最长长度是多少;实际上就是求字符串中最长的回文子序列的长度,最终答案是取长度为n的区间里最长的长度 和 长度为n-1的区间里最长的长度+1 的最大值;+1是因为n-1的区间剩下的那个可以被同时当作起点,注意是环形字符串; 分析:根据差分,dp[l][r]=max(dp[l][...

MaJorieL 261

HDU - 4745 Two Rabbits区间DP

题目链接: [Two Rabbits] 大致题意: 有一个环,现在有只兔子各从一个点开始起跳,一个沿顺时针,另一个沿逆时针,只能在一圈之内跳,并且每次所在的点的大小必须相同,问最多能经过几个点 解题思路: 环状的话可以先倍增改成链这道题目的话就是求最长回文子串 状态初始条件:dp[i][i]=1 (i=0:n-1) 状态转移方程:dp[i][j]=dp[i+1][j-1] + 2 if(str[i]==str[j]) ​ dp[i][j]=max(d

qq_49494204的博客 447

HDU4745 Two Rabbits区间dp

Two RabbitsLong long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon, they planned to play a game with some stones. There were n stones on the ground and they were arrang

ZYL的博客 378

HDU 4745 Two Rabbits (区间dp)

题意:只兔子,在n块围成一个环形的石头上跳跃,每块石头有一个权值ai,一只从左往右跳,一只从右往左跳,每跳一次,只兔子所在的石头的权值都要相等,在一圈内(各自不能超过各自的起点,也不能再次回到起点)它们最多能经过多少个石头。 题解:区间dp 其实就是求最长回文子序列长度,对于一个环,可以先求iii到jjj之间的最长回文子序列长度,然后选取一个分割点kkk,这样就不需要再复制一份接到原串后面了,...

gongyuandaye的博客 221

HDU 4745 Two Rabbits 区间dp

I - Two Rabbits Time Limit:5000MS    Memory Limit:65535KB    64bit IO Format:%I64d & %I64u SubmitStatusPracticeHDU 4745 Appoint description: Description Long long ago, there liv

MY Blog 1098

HDU 4745 Two Rabbits区间DP

Two Rabbits Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1441    Accepted Submission(s): 731 Problem Description Long long ago,

jncsw的博客 359

HDU4745-Two Rabbits(区间DP

Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon, they planned to play a game with some stones. There were n stones on the ground and they were arranged as a cl...

weixin_43357583的博客 230

HDU4745 Two Rabbits区间DP

题目链接 Problem Description Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon, they planned to play a game with some stones. There were n stones on the ground and t...

qq_42479630的博客 274

HDU 4745 Two Rabbits(区间dp)

这道题相对来说,我觉得就有点考查读题了 读题时一定要细心,大致就是要你求一个回文子序列,递推方程很简单 if(a[i]==a[j]) g[i][j]=max(g[i][j],g[i+1][j-1]+2); else g[i][j]=max(g[i+1][j],g[i][j-1]); 但不过他是环形的,但不过他又说了只兔子可以同时站在一个石头上。 所以遍历答案是就有同时遍历,长度为n...

KXL5180的博客 192

HDU 4745 Two Rabbits (区间DP)

题意:n个石头排成一个环,每个环有自己的重量,只兔子从个石头上出发,每一轮从一个石头跳到另一个石头,一个顺时针,一个逆时针,并且同一时间只兔子所在的石头重量相等。每只兔子不能跳到并且跳过自己曾在的石头。问最多进行多少轮。 思路: 把n个石头排成一排,再取n个石头和前n个石头一样,成2n个石头。比如说1121变成11211121 然后把这2*n个石头排成一个环,求这个环内的最长回文子串的

Neutralzz的博客 293

HDU4745 Two Rabbits(区间dp)

wsfw 卡在最后的答案统计了,看了别的博客,觉得很有道理。 先破环成链,答案有种情况: 1.在一段区间(最长为n)中的回文子序列:12321。站在l,r的位置开始行动 2.对于一个长度为n-1的序列来说,str[l-1]==str[r+1],所以有一种情况是站在l-1,r+1的位置开始行动。(说白了,l-1,r+1是同一个点,这种情况就是起点相同的情况。) #include <bits/stdc++.h> using namespace std; //-----pre_def--

sancpp的博客 190

hdu 4745 Two Rabbits 区间DP

http://acm.hdu.edu.cn/showproblem.php?pid=4745 题意: 有只兔子Tom Jerry, 他们在一个用石头围城的环形的路上跳, Tom只能顺时针跳,Jerry只能逆时针跳, 要求在跳的过程中他们所在石头的权值必须相同,而且只能单向跳,中间不能有已经跳过的石头。 思路: 模型就是求环上的最长回文串,我们只要将原串倍增,然后每个长度为n的子串的最长...

weixin_30666753的博客 112
上一篇: 裸的单调队列-poj-2823-Sliding Window
下一篇: 递推计数-hdu-4747-Mex
Accagain
博客等级 码龄14年 376粉丝 316原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值