USACO-1.1.4 Broken necklace
来源:互联网 发布:js 二维数组遍历 编辑:程序博客网 时间:2024/05/22 00:55
题意:假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收集的不同)。 确定应该在哪里打破项链来收集到最大数目的珠子。
题解:DP 深搜
1. 将原字符串复制一份加在后面, 将链转换成线性关系
2. 创建四个数组:
(下标)在i-1 和 i 之间 分割
lb[i] , lr[i] 指左边最多(不包括下标为i)的蓝珠,红珠的个数
rb[i] , rr[i] 指右边最多(包括下标为i)的蓝珠,红珠的个数
/*ID:jsntrdy1PROG: beads LANG: C++*/#include<cstdio>#include<iostream>#include<cstring>#include<fstream>using namespace std;ifstream fin("beads.in");ofstream fout("beads.out");const int N=360;string str;int lb[N*2],lr[N*2],rb[N*2],rr[N*2];int main(){ int n; fin>>n>>str; str+=str; for(int i=1;i<=n*2;i++) { if(str[i-1]=='b') lb[i]=lb[i-1]+1; else if(str[i-1]=='r') lr[i]=lr[i-1]+1; else { lb[i]=lb[i-1]+1; lr[i]=lr[i-1]+1; } } for(int i=n*2-1;i>=0;i--) { if(str[i]=='b') rb[i]=rb[i+1]+1; else if(str[i]=='r') rr[i]=rr[i+1]+1; else { rb[i]=rb[i+1]+1; rr[i]=rr[i+1]+1; } } int ans=0; for(int i=0;i<=n*2-1;i++) ans=max(max(lb[i],lr[i])+max(rb[i],rr[i]),ans); if(ans>=n) ans=n; fout<<ans<<endl; return 0;}
阅读全文
0 0
- USACO 1.1.4 Broken Necklace
- USACO 1.1.4 Broken Necklace
- [USACO 1.1.4] Broken Necklace
- USACO 1.1.4 Broken Necklace
- USACO 1.1.4 Broken Necklace
- USACO 1.1.4 Broken Necklace
- USACO-1.1.4 Broken necklace
- USACO 1.1-Broken Necklace
- usaco 1.1:Broken Necklace
- USACO 1.1 Broken Necklace
- usaco 1.1 Broken Necklace
- usaco/ 1.1 Broken Necklace
- USACO 1.1 Broken Necklace
- USACO 1.1 Broken Necklace
- USACO 1.1 Broken Necklace
- USACO 1.1 Broken Necklace
- USACO 1.1.4 Broken Necklace(beads)
- USACO 1.1.4 Broken Necklace(模拟)
- 使用github实现共享代码的一些入门级教程
- SDWebImage 源码
- SLA by Short brain-May-2017
- 小程序第一天
- 如何在Linux中使用awk工具详解
- USACO-1.1.4 Broken necklace
- (176)矢量操作表达式
- 3.C/C++字符串
- 正则表达式
- 动态规划——516. Longest Palindromic Subsequence[Medium]
- Spring(1)
- 第二十天:关于上一篇,写代码中遇到的困难,总结
- unsigned short中的一个大坑
- Spring(2)