[DP]BZOJ 4321: queue2
来源:互联网 发布:ots软件什么意思 编辑:程序博客网 时间:2024/05/22 12:35
Description
要求一个
- 任意相差为
1 的元素不相邻。
Description
OEIS上居然有这个东西。。
考虑DP吧。挺套路的DP。
考虑前
因为一个元素加进去只会影响比他小
这样就没有重复啦。。
#include <bits/stdc++.h>using namespace std;const int MOD = 7777777;const int N = 1010;typedef long long ll;inline char get(void) { static char buf[100000], *S = buf, *T = buf; if (S == T) { T = (S = buf) + fread(buf, 1, 100000, stdin); if (S == T) return EOF; } return *S++;}inline void read(int &x) { static char c; x = 0; for (c = get(); c < '0' || c > '9'; c = get()); for (; c >= '0' && c <= '9'; c = get()) x = x * 10 + c - '0';}int n, res;int dp[N][N][2];int pre[N], suf[N];inline void Add(int &x, int a) { x += a; while (x >= MOD) x -= MOD;}inline int Mod(int x) { Add(x, 0); return x;}int main(void) { freopen("1.in", "r", stdin); scanf("%d", &n); dp[2][1][1] = 2; for (int i = 3; i <= n; i++) { for (int j = 0; j < i; j++) { Add(dp[i][j][0], (ll)dp[i - 1][j + 1][0] * (j + 1) % MOD); Add(dp[i][j][0], (ll)dp[i - 1][j + 1][1] * j % MOD); if (i - j >= 2) Add(dp[i][j][0], (ll)dp[i - 1][j][0] * (i - j - 2) % MOD); Add(dp[i][j][0], (ll)dp[i - 1][j][1] * (i - j - 1) % MOD); if (j) Add(dp[i][j][1], dp[i - 1][j - 1][0] * 2); Add(dp[i][j][1], dp[i - 1][j][1]); if (j) Add(dp[i][j][1], dp[i - 1][j - 1][1]); } } cout << dp[n][0][0] << endl; return 0;}
阅读全文
2 0
- bzoj 4321 queue2 dp
- [DP]BZOJ 4321: queue2
- bzoj 4321: queue2 (DP)
- BZOJ 4321: queue2|动态规划
- 4321: queue2 思路题 DP
- 4321: queue2
- [DP] BZOJ4321. queue2
- DP bzoj4321 queue2
- [DP] BZOJ4321. queue2
- BZOJ4321 queue2 DP/递推
- BZOJ 4321 DP
- 【bzoj4321】queue2
- bzoj4321: queue2
- bzoj 3864 dp套dp
- BZOJ 1087 状压DP
- BZOJ 1207 DP
- BZOJ 2152 (树形DP)
- BZOJ 3791 作业 DP
- Google的自己的刷新方法SwipeRefreshLayout
- Elasticsearch中文分词插件IK Analyer安装操作指导(本博第二篇)
- lambda表达式
- ARToolKit的Marker(barcode码)的ID识别
- 计算机的两大设计思想
- [DP]BZOJ 4321: queue2
- Safari移动端 数字被识别成电话号码
- Gitflow工作流程
- 位运算
- 安卓 实现对已知路径文件夹以及文件排序和遍历
- Android开发:控件GridView的使用
- 数组排序之冒泡排序
- 记一次apache POI存储word乱码问题
- 枚举---java类集对枚举的支持