ACM集训日记-8月24日

    暑期ACM集训也接近结尾了,今天是最后一次训练赛了,我的小队也是都有事了,基本是在孤军奋战,早上还在啃树状数组,早上做的T题点击打开链接,感觉这个又是一个排兵布阵的变形,本来以为会很简单,结果一个地方小小的改变,变得很不好解决,就是他增加值的操作,是将区间内的数组都增加相同的值,由于add的操作会造成之后的数组值更新,所以不好做,用了两个数组维护值。 

 

 if(op[0]=='C')
{  
                scanf("%d",&x);  
                add(bit0,a,-(x*(a-1)));  
                add(bit1,a,x);  
                add(bit1,b+1,-x);  
                add(bit0,b+1,x*b);  
}  

    然后下午的训练赛也着实不好做,第一个做完的是B题,这道题以前在单调队列中做过,但再一次做还是费了点时间,一开始是超时,发现没有改scanf 中的%d,改成%I64d就行了,因为之前那样写每次都会强制转换类型,也会花费时间,做过的题还是不够熟练啊,然后做的是D题点击打开链接,一开始看这道题,还理解错题意了,以为是一个贪心的题只要把小的在前面取出来就行了,然后发现样例不过,重新读题才知道,每次取只会从最前和最后选一个取,第二次用的是dfs,把所有情况都举了出来,然后就超时了,然后就发现不能这么做,然后发现这其实是dp!

 

 

for(int i=1;i<=n;i++)
    {
        for(int j=1;j+i-1<=n;j++)
        {
            int tmp=n-i+1;
            int temp=i+j-1;
            f[j][temp]=max(f[j+1][temp]+tmp*a[j],f[j][temp-1]+tmp*a[temp]);
        }
    }

找到规律后就一路绿灯,也不超时了。

 

    今天就这样过去了,小组的都回去了,就留我一人在ACM中独自凌乱XD

    明天加油!
 


 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值