HDU 5136 Yue Fei's Battle
来源:互联网 发布:unity3d 无法注册 编辑:程序博客网 时间:2024/04/30 07:30
传送门
设
那么二叉树的两个分支有3种情况:
所有情况加起来就行了。
#include <bits/stdc++.h>using namespace std;#define prt(k) cerr<<#k" = "<<k<<endltypedef long long ll;const ll mod = 1e9 + 7;ll pmod(ll a, ll n){ ll ret = 1; for (; n; n>>=1, a=a*a%mod) if (n&1) ret = ret * a % mod; return ret;}ll getinv(ll a){ return pmod(a, mod - 2);}const int N = 100100;ll dp[N + 5], sum[N + 5];const ll inv2 = getinv(2);ll sub(ll a, ll b){ return (a - b + mod) % mod;}void init(){ dp[0] = 1; dp[1] = 1; sum[0] = 1; sum[1] = 2; for (int i=1;i<N;i++) { dp[i+1] = (dp[i] * sum[i-1] % mod); dp[i+1] = (dp[i+1] + (dp[i] + 1)%mod * dp[i] % mod * inv2 % mod) % mod; sum[i+1] = (sum[i] + dp[i+1]) % mod; }}ll C3(ll a){ return ((a*sub(a,1)%mod) * sub(a,2) % mod) * getinv(6) % mod;}ll f(int K){ int i = K / 2; ll ans = ((dp[i] * (dp[i] + 1)%mod) % mod * inv2 % mod ) % mod; ll tmp = ans; if (K%2==0) { return ans; } ans = (ans * sum[i-1]) % mod; ans = (ans + dp[i]) % mod; ans = (ans + (dp[i]-1+mod)%mod * dp[i] % mod) % mod; ans = (ans + C3(dp[i])) % mod; return ans;}int main(){ int K; init(); while (cin>>K, K) { ll ans = f(K); cout<<ans<<endl; } return 0;}
0 0
- hdu 5136 Yue Fei's Battle
- HDU 5136 Yue Fei's Battle
- HDU 5136 Yue Fei's Battle
- HDU 5136 Yue Fei's Battle
- hdu 5136 Yue Fei's Battle
- HDU 5136 Yue Fei's Battle(计数DP)
- hdu 5136 Yue Fei's Battle(计数DP)
- hdu 5136 Yue Fei's Battle 树的dp计数
- HDU 5136 【2014广州现场赛 J】 Yue Fei's Battle
- hdu5136Yue Fei's Battle(计数dp)
- yue
- Battle HDU
- fei
- hdu 3061 Battle
- HDU 3061 Battle
- hdu 5093 Battle ships
- HDU 5093 Battle ships
- HDU 5093Battle ships
- java多线程之ThreadLocal
- Expect and TCL mini reference manual
- 华为oj 将真分数分解为埃及分数
- linux DNS配置
- 历史上最伟大的12位程序员
- HDU 5136 Yue Fei's Battle
- 计算一段程序运行时间
- Nginx负载均衡配置(实现多台主机应用负载均衡并且隐藏应用主机不受攻击)
- SElinux 学习笔记一
- wampserver
- javascript获取上一工作日
- 内容提供者
- 规则引擎实战篇-------银行贷款业务处理3
- C语言实现的一个链式栈