【备战蓝桥杯】USACO--> Beads 2.0
2014-01-26 22:05
288 查看
题目链接:http://wikioi.com/problem/1542/
昨天运行一下才发现,原来超过时间了。= =,囧了,于是去找有什么方法可以优化一下速度。毕竟我的算法的时间复杂度是O(n²)。太恐怖了。
寻找提示,发现可以尝试使用动态规划。
动规真是个好东西,从宏观的角度去思考这个问题,把问题细节化到每一个小点上。而且就比赛本身而言,一般来说空间是给够了的。因此,大胆用空间来弥补时间的不足吧。
昨天是平铺直叙,今天就是宏观规划。加油吧,骚年!
昨天运行一下才发现,原来超过时间了。= =,囧了,于是去找有什么方法可以优化一下速度。毕竟我的算法的时间复杂度是O(n²)。太恐怖了。
寻找提示,发现可以尝试使用动态规划。
动规真是个好东西,从宏观的角度去思考这个问题,把问题细节化到每一个小点上。而且就比赛本身而言,一般来说空间是给够了的。因此,大胆用空间来弥补时间的不足吧。
#include <stdio.h> #include <string.h> #define N 360 int bl[N*2],br[N*2],rl[N*2],rr[N*2]; int main() { int len; char input ; scanf("%d",&len); scanf("%s",input); char str[N*2]; strcpy(str,input); strcat(str,input); bl[0] = rl[0] = 0; br[len*2-1] = rr[len*2-1] = 0; int i; /* 全部是一样的情况下,就会多算。 循环算, 4 bbbb bbbb bl 0123 4567 br 0 */ for(i=1 ; i< 2*len ; i++) { if( str[i] == 'r') { rl[i] = rl[i-1] + 1; bl[i] = 0; } else if( str[i] == 'b') { bl[i] = bl[i-1] + 1; rl[i] = 0; } else { bl[i] = bl[i-1] + 1; rl[i] = rl[i-1]+1; } } for(i=2*len-2 ; i >= 0 ; i--) { if( str[i] == 'r') { rr[i] = rr[i+1] + 1; br[i] = 0; } else if( str[i] == 'b') { br[i] = br[i+1]+1; rr[i] = 0; } else { rr[i] = rr[i+1] + 1; br[i] = br[i+1]+1; } } int max= 0 ; int maxl,maxr; for(i=0 ;i< 2*len-1 ; i++) { maxl = bl[i] > rl[i] ? bl[i]:rl[i]; maxr = br[i+1] > rr[i+1] ? br[i+1] : rr[i+1] ; max = (maxl+maxr)>max ? (maxl+maxr):max; } max = max > len ? len : max; printf("%d",max); return 0; }
昨天是平铺直叙,今天就是宏观规划。加油吧,骚年!
相关文章推荐
- 【备战蓝桥杯】USACO-> Beads
- 【备战蓝桥杯】USACO-->barn(未完)
- 【备战蓝桥杯】USACo--> airpro【改变策略】
- 【备战蓝桥杯】USACO--> calfflac 奶牛回文
- 【备战蓝桥杯】USACO-->crypt
- 【备战蓝桥杯】USACO--> Milking Cows[2]
- 【备战蓝桥杯】USACO--> barn (终结)
- 【备战蓝桥杯】USACO--> Transformation
- 【备战蓝桥杯】USACO--> Milking Cows[1]
- 【备战蓝桥杯】USACO-->palsquare
- 【备战蓝桥杯】USACO--> milk
- 【备战蓝桥杯】USACO-->dualpul
- <备战蓝桥杯之嵌入式>——USART
- <备战蓝桥杯之嵌入式>——SYSTICK
- <备战蓝桥杯之嵌入式>——BUTTON按键实验
- <备战蓝桥杯之嵌入式>——USART
- <备战蓝桥杯之嵌入式>——EXTI
- <备战蓝桥杯之嵌入式>——TIM
- <备战蓝桥杯之嵌入式>——PWM
- <备战蓝桥杯之嵌入式>——输入捕获