code forces431C_dp_注意结果要多加两个modd保证输出是正数
Posted passion27
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了code forces431C_dp_注意结果要多加两个modd保证输出是正数相关的知识,希望对你有一定的参考价值。
C. k-Tree
time limit per test
1 secondmemory limit per test
256 megabytesinput
standard inputoutput
standard outputQuite recently a creative student Lesha had a lecture on trees. After the lecture Lesha was inspired and came up with the tree of his own which he called a k-tree.
A k-tree is an infinite rooted tree where:
- each vertex has exactly k children;
- each edge has some weight;
- if we look at the edges that goes from some vertex to its children (exactly k edges), then their weights will equal 1,?2,?3,?...,?k.
The picture below shows a part of a 3-tree.
Help Dima find an answer to his question. As the number of ways can be rather large, print it modulo 1000000007 (109?+?7).
Input
A single line contains three space-separated integers: n, k and d (1?≤?n,?k?≤?100; 1?≤?d?≤?k).
Output
Print a single integer — the answer to the problem modulo 1000000007 (109?+?7).
Examples
input
Copy
3 3 2
output
Copy
3
input
Copy
3 3 3
output
Copy
1
input
Copy
4 3 2
output
Copy
6
input
Copy
4 5 2
output
Copy
7
#include <iostream> #include<bits/stdc++.h> using namespace std; const int modd=1e9+7; int main() { int n,k,d; cin>>n>>k>>d; long long dp[2][105]; memset(dp,0,sizeof(dp)); dp[0][0]=1; dp[1][0]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=k;j++) { if(i<j)break; dp[0][i]=(dp[0][i]+dp[0][i-j])%modd; } for(int j=1;j<=d-1;j++) { if(i<j)break; dp[1][i]=(dp[1][i]+dp[1][i-j])%modd; } } cout<<((dp[0][n]-dp[1][n])%modd+modd)%modd;//这里加了两个odd是因为要保证结果为正数 return 0; }
以上是关于code forces431C_dp_注意结果要多加两个modd保证输出是正数的主要内容,如果未能解决你的问题,请参考以下文章