“一切都会好起来的。”|

zplqwq

园龄:3年10个月粉丝:25关注:14

📂题解
🔖DP
2021-12-15 22:05阅读: 63评论: 0推荐: 0

题解 P6191 【[USACO09FEB]Bulls And Cows S】

Bulls And Cows题解

ello 我们来看下这道题

看到这道题,一般不是很容易想到dp,尤其是初学者。

因为dp在初学者(起码是我)印象中是专门处理最优解问题的。

但是,dp其实还可以处理一下问题:

  • 最优解
  • 总和
  • 判断对错
  • ....

题目分析

既然提到了dp,那么我们就开始顺着dp的方向想。

首先,我们需要考虑第一步选择是啥。

如何考虑这个问题?

  • 其实这道题你可以考虑最后一个位置(或者第一个位置)放奶牛还是公牛

这就是我们的第一步选择。

做出第一步选择后,我们可以发现这个问题就转化成了一个几乎同样的子问题。

为什么?

我们分两种情况讨论:

  • 第一种,如果要是最后一个位置(或者第一个位置)放的是奶牛,那么,我们就直接考虑第n-1个位置是公牛还是母牛,因为在第n个位置放奶牛并不影响前面的任何一个位置。
  • 第二种,如果要是最后一个位置(或者第一个位置)放的是公牛,那么,我们第n-k-1个位置放公牛还是母牛,因为在第n个位置放公牛就代表着n~n-k之间的位置已经固定了。

综上,最后的dp[i]其实就是dp[i1]+dp[ik1]

最后,还有一个问题,初始化。

我们如何考虑?

首先,我们需要知道什么东西需要初始化。

  • dp[0~k]
  • 因为他们之间是不可能有>2头公牛的。

其次,要考虑初始值。

  • dp[i]=i+1

好!那现在你们应该会写了吧...

对了,别忘了取模

关键代码:

for(int i=0;i<=k;i++)
{
dp[i]=i+1;
}
for(int i=k+1;i<=n;i++)
{
dp[i]+=dp[i-1]+dp[i-k-1];
dp[i]%=5000011;
}

本文作者:zplqwq

本文链接:https://www.cnblogs.com/zplqwq/p/15695554.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   zplqwq  阅读(63)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起