博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【USACO1.1】Broken Necklace
阅读量:6718 次
发布时间:2019-06-25

本文共 1338 字,大约阅读时间需要 4 分钟。

题意

一个环形项链,有rbw三种珠子,r代表red,b代表blue,w代表white,从任意一个位置断开,两端分别取珠子,同一端取的珠子要相同颜色,w可以染成想要的颜色,即既可当作r也可以当作b,求最多取得的珠子个数。最多有350个珠子。

分析

可以枚举断开的位置,然后模拟取珠子。也可以枚举起点位置。还可以dp做。

代码

枚举断点

#include
#include
#define N 355 using namespace std; char a; int b[N]; int n,ans; int solve(int p,int dir) //p为起始点,dir为方向,求最多取几颗 {
int len=0;//取了的珠子个数,最多取n颗珠子 for(int j=p+n; len

枚举起点

#include
#include
#include
#include
using namespace std; int n,ans; string s; int main() {
cin>>n>>s; s+=s; for(int i=0,j; i

DP

#include
#include
#include
#include
#define N 720 using namespace std; int n,ans; string s; int l[N][2],r[N][2]; int main(){
cin>>n>>s; s+=s; for(int i=1;i<2*n;i++){
l[i][0]=l[i-1][0]+1; l[i][1]=l[i-1][1]+1; if(s[i-1]=='r') l[i][1]=0; else if(s[i-1]=='b') l[i][0]=0; } for(int i=2*n-1;i>=0;i--){
r[i][0]=r[i+1][0]+1; r[i][1]=r[i+1][1]+1; if(s[i]=='r') r[i][1]=0; else if(s[i]=='b') r[i][0]=0; } for(int i=0;i<2*n;i++) ans=max(ans,max(l[i][0],l[i][1])+max(r[i][0],r[i][1])); ans=min(ans,n); cout<
<
 
 

转载地址:http://euumo.baihongyu.com/

你可能感兴趣的文章
linux操作界面配置
查看>>
命名管道操作
查看>>
Linux下的磁盘使用情况
查看>>
python基础 -- acm
查看>>
android第一天
查看>>
湖南卫视邮件服务器架设方案
查看>>
LoadRunner11破解详解
查看>>
排序算法 时间、空间复杂度
查看>>
集合框架(集合的继承体系图解)
查看>>
Win32应用程序(SDK)设计原理详解
查看>>
windows serve 2012部署操作系统之部署前期准备(九)
查看>>
JFinal整合HTTL模板引擎
查看>>
“Object "netns" is unknown, try "ip help".\n'”报错
查看>>
SQL语句中----删除表数据drop、truncate和delete的用法
查看>>
零零散散学算法之详解几种数据存储结构
查看>>
我的友情链接
查看>>
关于vmware station 12pro 简易安装
查看>>
有用的正则表达式
查看>>
mysql show status解释
查看>>
Spark 下操作 HBase(1.0.0 新 API)
查看>>