博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USACO Broken Necklace
阅读量:5159 次
发布时间:2019-06-13

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

去掉题目的背景:就是一个环形的串中,寻找一个最长的子串,该串由前后由俩部分组成,连续的b串和连续的r串,当然,一种颜色也可以;w可转变成任意颜色;

我的思路:比较简单的思路,但是是一个复杂度O(n^2)的算法;

先求出以每一个位置开始的最长串的长度,再找出可衔接的最长串即可;

USACO上面有更快的O(n)算法。

Holland's Frank Takes has a potentially easier solution: /* This solution simply changes the string s into ss, then for every starting// symbol it checks if it can make a sequence simply by repeatedly checking // if a sequence can be found that is longer than the current maximum one.*/#include 
#include
using namespace std;int main() { fstream input, output; string inputFilename = "beads.in", outputFilename = "beads.out"; input.open(inputFilename.c_str(), ios::in); output.open(outputFilename.c_str(), ios::out); int n, max=0, current, state, i, j; string s; char c; input >> n >> s; s = s+s; for(i=0; i
max) max = current; } // for output << max << endl; return 0;} // main
/*ID: nanke691LANG: C++TASK: beads*/#include
#include
#include
using namespace std;char s1[700];int dp[355];int main(){ int n; FILE *fin = fopen ("beads.in", "r"); FILE *fout = fopen ("beads.out", "w"); //while(scanf("%d",&n)==1) //{ fscanf(fin,"%d",&n); fscanf(fin,"%s",s1); for(int i=0;i
n) sum=dp[i]+dp[t-n]; else sum=dp[i]+dp[t+i]; if(sum>max1) max1=sum; if(max1>=n) { max1=n; break; } } fprintf(fout,"%d\n",max1); //} return 0;}

转载于:https://www.cnblogs.com/nanke/archive/2011/10/10/2206514.html

你可能感兴趣的文章
SOAP 与 restful service区别
查看>>
centos 6.5 联网
查看>>
Java入门 手把手教你配置环境变量
查看>>
报数游戏
查看>>
正则替换 php js
查看>>
2018.12.17断点调试,js引入,变量定义,三种弹出框,数据类型,数据类型转换
查看>>
洛谷1828 香甜的黄油
查看>>
BZOJ 1296(SCOI 2009) 粉刷匠
查看>>
python 全栈开发,Day34(基于UDP协议的socket)
查看>>
GIS在石油行业中的应用
查看>>
Android流量统计
查看>>
iOS UIScrollview 和侧滑手势冲突解决方法
查看>>
三招提高.NET网站性能
查看>>
P4111 [HEOI2015]小Z的房间
查看>>
React-Native 学习之 Flex布局(转)
查看>>
代码书写规则
查看>>
python3----splitlines
查看>>
linux进程管理
查看>>
.net实现webservice简单实例分享
查看>>
题目1053:互换最大最小数------------------------max,m1=0,min,m2=0;这几个值定义的地方决定是否能ac...
查看>>