1. 前言

  • 这是一道经典的dp题,时限:20min
  • 环形dp通常转换成两个字符串拼接在一起从而覆盖住所有情况。
  • 使用两次dp,分别求解分割点左侧和右侧的最大值。这种dp下再分左右区间的问题也有很多。
  • 注意边界条件
  • 文章来源:CSDN@LawsonAbs

2. 题目

2.1 题目链接

2.2 题意

给出一串由r,b,w字符组成的环形字符串,问如何从环中切割,拉直后,从左端和从右端分别找出最长的相同字符长度。其中w既可以做r字符,也可以代替b字符。
输入:一串字符
输出:可以收集到的最多的珠子数目(左右侧珠子数之和)

下面以字符串 “wrwrrb” 举例说明:

3. 分析

刷过题的都知道这是一道明眼的dp题。但是有个问题还是得问自己:dp数组该如何定义?

  • 定义dpl[i] ,dpr[i] 表示在第i个单词前分开,从左向右 和 从右向左可以划分得到的最大长度,然后最后取和求最大即可。i从0开始。有一个地方需要注意:dpl[i]dpr[i] 都必须同时保持在单词前,或者同时在单词后分割。 我们这里选择在单词前分割,举个例子:
012345
wrwrrb

i=5时,分界情况就是:wrwrr[SEP]bdpl[i] 的计算就是bwrwrr中的bw,长度为2(从分界点往右);dpr[5]的长度就是rrwrwb为5(分界点往左);

  • 因为像统一处理环形,所以我们将两个字符串拼接在一起。【其实如果不想拼接,应该可以用取模达到同样的效果】字符串拼接之后,最大的数组长度也需要改变为2*maxN。

4. 代码

代码无非就是这些分界点比较难搞,如果这些搞清楚之后,就很好的写代码了。

#include<iostream>
#include<string>using namespace std;
const  int maxN = 400;int main(){int dpl[maxN],dpr[maxN];int n ;string str;//cin >> n ;cin >> str;str += str; // 两份拼凑//初始化都为1 fill(dpl,dpl+maxN,1);fill(dpr,dpr+maxN,1);char cur_color;int len = str.length();    //dpl[i]表示从第i个节点前分开 for (int i = 0;i< len-1;i++){cur_color = str[i];for(int j = i+1;j<len;j++){if(cur_color == str[j] || str[j] == 'w'){dpl[i]++;             }else if(cur_color == 'w' && str[j]!='w'){cur_color = str[j] ;  //修改当前色 dpl[i]++;}                else //跳出循环,结束 break;            }}//从右往左 dpr[i] 必须包括自己 ,dpr[i]表示从第i个节点前分开 for (int i = len-1;i >=1 ;i--){cur_color = str[i-1]; for(int j = i-2;j>=0;j--){         if(cur_color == str[j] || str[j] == 'w' ){dpr[i]++;             }else if(cur_color == 'w' && str[j]!='w'){cur_color = str[j] ;  //修改当前色 dpr[i]++; }               else //跳出循环,结束 break;  }}int res = 0;for (int i = 0;i< len;i++){//cout <<"i="<<i<<" "<< dpl[i] <<" "<< dpr[i]<<"\n";res = max(dpl[i]+dpr[i],res);}//需要注意最长不过原始str 本身的长度 cout << min(res,len/2) ;
}

测试用例

1
b 3
rrr5
wrwrr29
brbrrrbbbrrrrrbrrbbrbbbbrrrrb29
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

【洛谷】P1203 [USACO1.1]坏掉的项链Broken Necklace相关推荐

  1. 洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace

    P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 ...

  2. 洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace 动态规划

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  3. 洛谷 1203 [USACO1.1]坏掉的项链Broken Necklace

    题目: https://www.luogu.org/problem/show?pid=1203 标签是搜索和动态规划--: O(n^2)纯模拟; 这个题交了三遍才A: 思路: 记两个数组:Next和p ...

  4. P1203 [USACO1.1]坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  5. AC日记——[USACO1.1]坏掉的项链Broken Necklace 洛谷 P1203

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  6. [USACO1.1]坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  7. USACO Training Section 1.1 坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  8. 坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  9. usaco1.1坏掉的项链

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

最新文章

  1. 从零开始学习docker(一)
  2. 线程中这么调用类_一文学会 Python 多线程编程
  3. ARM DS-5 Flex网络许可证编译错误“Error: C9933W: Waiting for license...”
  4. 校园网锐捷Ubuntu12.04LTS
  5. 单片机跑马灯代码示例
  6. 灵格斯词典(电脑端)+欧陆词典(手机端)
  7. unit怎么发音_“unit”怎么读?
  8. 基于RiskPariyBlackLitterman的因子择时
  9. SIRIUS更新日志|SIRIUS人脸识别更新日志|天狼星人脸识别更新日志
  10. 中式红木装修,古雅灵动、温婉雅致、独具风情
  11. 钉钉isv应用开发(钉钉isv应用开发注意事项)
  12. 大盘点!进口+国产28款分子POCT设备分析
  13. 博客登录注册界面的实现
  14. 新茶饮、新烘焙的2021:亏损与食安问题未解,元宇宙和第三空间又来凑热闹
  15. STC89C52单片机实验 DAY1 LED模块
  16. 微信中网页分享开发遇到的坑
  17. 安装Office2010/2007出现1935错误解决办法
  18. 零基础,自学JAVA编程需要多长时间才能学完?
  19. [003]python数据类型一__python_全栈基础
  20. 【OA办公】OA流程审批大揭秘,带你看遍所有基础流程

热门文章

  1. 网络爬虫笔记—滑动验证码识别
  2. Chrome 的书签太多如何分类整理比较好
  3. sleuth+zipkin链路追踪
  4. 银行网络安全现状及要求措施建议
  5. python的网络请求库urllib、urllib2、urllib3、request的联系
  6. Linux服务器安装配置Redis
  7. Python智慧农业之将数据存储在表格中并从图表中获取见解,基于 Google 表格和 Neo4j 中维护伴随植物知识图谱(教程含源码)
  8. utf8改成utf8mb4实战教程
  9. gz是什么意思饭圈_电竞最后的排面,UZI被抬上年度第一,饭圈女孩:放过我们吧哥哥...
  10. 200条装修小常识①