USACO之旅-d2

来自本人百度空间 2009-11-13 08:03

我觉得是该写点什么了…………

昨天VJ连续第N天挂掉…………

没办法,就去做USACO

我们就继续USACO之旅

今天做了恶心的那道项链题(1.4)

话说,这题DP没什么问题,应该大家都能搞定,我今天就来说说我突然脑子冲血做的方法……

这种方法做得我很憔悴……

好,先来大体介绍介绍我的方法……下面是我的测试时间

Executing...
   Test 1: TEST OK [0.000 secs, 208 KB]
   Test 2: TEST OK [0.011 secs, 208 KB]
   Test 3: TEST OK [0.000 secs, 208 KB]
   Test 4: TEST OK [0.011 secs, 208 KB]
   Test 5: TEST OK [0.000 secs, 208 KB]
   Test 6: TEST OK [0.000 secs, 208 KB]
   Test 7: TEST OK [0.000 secs, 208 KB]
   Test 8: TEST OK [0.000 secs, 208 KB]
   Test 9: TEST OK [0.000 secs, 208 KB]

All tests OK.
2和4都用了较多时间,因为我这个方法,和‘w’非常有关系,下面大家就会知道。

首先,我的算法,可以号称o(n)(最近是比较流行的词……),其实会多一些,因为我们扫描的时候要考虑所扫描段前后的‘w’。好啦,不卖关子了,介绍算法。

我们用两个sum来记录当前扫描的和的值,以及前一个扫描的和的值。

我们先来解决容易的,如果扫描指针i在项链中间的时候,当它所对的珠子前是‘w’的时候,减小指针,并减小前一个和。之后,当后面的珠子和当前珠子能连接,且后面珠子没有超出项链范围时,增加指针,并增加当前和。这部扫描之后你就可以得到两个和,将这两个和的和与max比较。

当然还有两头的问题,当你加到最后的和的时候,首先要考虑的是,尾的和+首的和与max比较。显然我们需要记录首和。其次,首位如果能连起来的话,又需要考虑将首和加到最后的两个sum的和中,我在程序中就没有考虑将尾和加入前两个sum的和中,USACO并没有设置这样的数据……当然,在读入之后的预处理,可以解决头尾的颜色(头尾都可能出现‘w’,所以不能随意地取头尾的珠子为头尾颜色)。

当然,这个算法虽然说比DP省时,但的确很难想的周全,下面我就说我自己注意到的特殊情况,虽然过了USACO的关,但不一定是完全正确啊,也还希望大家帮我挑挑骨头。

首先,你要避免整个项链可以全部取完,即除了‘w’全部同色。这样的恶心数据就让我挂了一次,

3

rrr

我的答案是6……

阿门,终于过了这个恶心题…………

USACO,继续进发~!~~!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值