【bzoj4321】queue2
来源:互联网 发布:怎么用邮箱注册知乎 编辑:程序博客网 时间:2024/05/21 09:56
DP,状态想了很久……
设
先考虑第i个沙茶和第i-1个沙茶相邻,
故
再考虑第i个沙茶和第i-1个沙茶不相邻,
单身狗总是想FFF恩爱狗嘛~
当前的沙茶可以选择在第i-1个沙茶和第i-2个沙茶牵手或不牵手的时候去拆散别人,那么分别有
故
时间
然而我太懒没有写滚动>_<
另外……
http://oeis.org/A002464
咳咳。
我也不知道为什么
学长说可能是容斥的。
#include <bits/stdc++.h>#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=a;i>=b;i--)inline int rd() { char c = getchar(); while (!isdigit(c)) c = getchar() ; int x = c - '0'; while (isdigit(c = getchar())) x = x * 10 + c - '0'; return x;}typedef long long ll;const int mod = 7777777;inline void upd(int&a , ll b) { if (b >= mod) b %= mod ; a += b ; if (a >= mod) a -= mod ; }int n , f[1001][1001][2];void input() { n = rd();}void solve() { f[1][0][0] = 1; rep(i , 2 , n) rep(j , 0 , i - 1) { f[i][j][1] = f[i - 1][j][1]; if (j) upd(f[i][j][1] , f[i - 1][j - 1][0] * 2ll + f[i - 1][j - 1][1]); upd(f[i][j][0] , (ll) f[i - 1][j + 1][1] * j); upd(f[i][j][0] , (ll) f[i - 1][j + 1][0] * (j + 1)); upd(f[i][j][0] , (ll) f[i - 1][j][1] * (i - j - 1)); upd(f[i][j][0] , (ll) f[i - 1][j][0] * (i - j - 2)); } printf("%d\n" , f[n][0][0]);}int main() { #ifndef ONLINE_JUDGE // freopen("data.txt" , "r" , stdin); #endif input(); solve(); return 0;}
- 【bzoj4321】queue2
- bzoj4321: queue2
- [DP] BZOJ4321. queue2
- DP bzoj4321 queue2
- [DP] BZOJ4321. queue2
- BZOJ4321 queue2 DP/递推
- 4321: queue2
- bzoj 4321 queue2 dp
- [DP]BZOJ 4321: queue2
- BZOJ 4321: queue2|动态规划
- 4321: queue2 思路题 DP
- bzoj 4321: queue2 (DP)
- 队列:队尾----队头 对应 栈底----栈顶 对应 序号 N----3,2,1,0
- 一个线性布局中,为什么 android:layout_gravity="right"不能控制按钮在屏幕右侧?
- 理解Cookie和Session机制
- 端口号冲突
- 模拟Socket的通讯----(3)---服务器端--可忽略
- 【bzoj4321】queue2
- OC学习旅程(二)类和对象的存储细节、#paragma mark 和 新建类时的常见错误
- java list的遍历
- 集合中元素的顺序
- linux:环境变量配置文件
- CentOs Yum在线安装MYSQL5.6
- LinkedList和ArrayList、ArrayDeque的比较
- 译:PendingIntent详解
- Xamrin上拉加载,下拉刷新mj的用法