暑假总结4

本周做的题都是普及/提高-难度的。这些题目相比之前做的那些题来说确实不好做,看题解都要想半天才能想明白。

周末的比赛我发现自己还是不太行,才ac了两道,还有两道超时过不去,以后还是得多看博客来提高。

下面是本周做到的特殊思路的题

P6191 [USACO09FEB]Bulls And Cows S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题看了几遍后觉得是动态规划,但不知道转移方程怎么求,看了题解才知道的;dp【i】表示当公牛放在位置i时的方法数。分两种情况:第一种,如果第i个位置放的是奶牛,第i-1个位置是公牛或者奶牛;第二种,如果第i个位置放的是公牛,第i-k-1个位置放公牛或者奶牛;转移方程为dp[i]+=dp[i-1]+dp[i-k-1];还要注意当i<=k时dp[i]=i+1;i-1是因为在放公牛的同时还要加上全是奶牛的情况。


P1209 [USACO1.3]修理牛棚 Barn Repair - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题从题解中学到了这个贪心方式。先假设只有一块木板从编号最小的牛棚一直铺到编号最大的牛棚,按相邻牛棚的编号差从大到小排列,然后断开m-1处位置(已经有一块木板了)得到m块木板。因为是从编号差大的开始断,所以模板总长度一定最小。


P2866 [USACO06NOV]Bad Hair Day S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题我一开始想的是暴力枚举,但看到数据量就感觉会超时,交了之后也确实这样。然后就看题解,在众多题解中发现一种在我知识范围内的思路(他们太强了)。思路:将最前面的(第n+1头)奶牛的身高设为一个很大的值,设一个数组h[i],表示在前面第一个比第i头牛高的牛的位置,然后从前面往后面枚举,通过数组h找到前面第一个比当前牛高的牛的位置,然后计入答案。关键代码:

for(int i=n;i>0;i--)
{p=i+1;//p为当前牛的前面的一个牛
    while(a[i]>a[p]&&p)
        p=h[p];
    h[i]=p;
    ans+=p-i-1;
}

贪心和动态规划的题目还是要多做,这种思路我一开始就没想到,做多了也许就能想到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值