bzoj 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛 (dp+前缀)
2017-03-31 13:17
429 查看
3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 208 Solved: 140
[Submit][Status][Discuss]
Description
约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有K(O≤K<N)只牝牛.请计算一共有多少种排队的方法.所有牡牛可以看成是相同的,所有牝牛也一样.答案对5000011取模
Input
一行,输入两个整数N和K.
Output
一个整数,表示排队的方法数.
Sample Input
4 2
Sample Output
6样例说明
6种方法分别是:牝牝牝牝,牡牝牝牝,牝牡牝牝,牝牝牡牝,牝牝牝牡,牡牝牝牡
HINT
Source
Silver[Submit][Status][Discuss]
f[i]表示i只牛最后一只是*的方案数
f[i]=f[i-k-1]+f[i-k-2]+f[i-k-3]+……+f[0]
用一个sum记录前缀
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e5 + 5; const int Mod = 5000011; int dp[maxn], sum[maxn]; int main() { int n, k; while(~scanf("%d%d", &n, &k)) { memset(dp, 0, sizeof(dp)); memset(sum, 0, sizeof(sum)); sum[0] = 1; for(int i = 1; i <= n; i++) { if(i-k-1 <= 0) { dp[i] = 1; sum[i] = (sum[i-1]+dp[i])%Mod; } else { dp[i] = sum[i-k-1]; sum[i] = (sum[i-1] + dp[i])%Mod; } } printf("%d\n", sum ); } return 0; }
相关文章推荐
- bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(dp+前缀和)
- bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛【dp】
- bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(DP)
- [BZOJ3398][Usaco2009 Feb]Bullcow 牡牛和牝牛(dp)
- BZOJ 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛( dp )
- BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学
- bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 动态规划
- 【BZOJ】【3398】【USACO 2009 Feb】Bullcow 牡牛和牝牛
- BZOJ 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛|动态规划|排列组合
- 【排列组合 乘法逆元】【bzoj 3398】: [Usaco2009 Feb]Bullcow 牡牛和牝牛
- bzoj:3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛
- 【BZOJ】3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(排列组合+乘法逆元+欧拉定理/费马小定理)
- 【bzoj3398】【Usaco2009 Feb】【Bullcow 牡牛和牝牛】【组合数学】
- 【bzoj3398】[Usaco2009 Feb]Bullcow 牡牛和牝牛 dp
- 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
- BZOJ3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛
- BZOJ3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
- bzoj3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
- BZOJ 1578: [Usaco2009 Feb]Stock Market 股票市场( 背包dp )
- bzoj1723 [ Usaco2009 Feb ] --前缀和(水题)