BZOJ 4321: queue2( dp )
2015-12-28 14:41
363 查看
dp(i, j, 1)表示前i个, 有j对是不合法的, i和i-1是在一起的.
dp(i, j, 0)表示前i个, 有j对是不合法的, i和i-1不在一起的.
转移我们只需考虑是多了一对不合法的还是少了一对不合法的, 或者是不变, 考虑当前i和i-1,i-2的位置的影响就可以了.
dp(i, j, 1) = 2*dp(i-1, j-1, 0) + dp(i-1, j-1, 1) + dp(i-1, j, 1)
dp(i, j, 0) = (i-j-2)*dp(i-1, j, 0) + (j+1)*dp(i-1, j+1, 0) + (i-j-1)*dp(i-1,j,1) + j*dp(i-1, j+1, 1)
这道题貌似还有递推式....
---------------------------------------------------------------------------------
#include<cstdio>#include<cstring>#include<algorithm> using namespace std; typedef long long ll; const int maxn = 1009;const int MOD = 7777777; int dp[2][maxn][2], N; inline void upd(int &x, int t) { if((x += t) >= MOD) x -= MOD;} int main() { scanf("%d", &N); int c = 0, p = 1; memset(dp[c], 0, sizeof dp[c]); dp[c][0][0] = 1; for(int i = 2; i <= N; i++) { swap(c, p); memset(dp[c], 0, sizeof dp[c]); for(int j = 0; j < i; j++) { dp[c][j][1] = dp[p][j][1]; if(j) { upd(dp[c][j][1], dp[p][j - 1][0]); upd(dp[c][j][1], dp[p][j - 1][0]); upd(dp[c][j][1], dp[p][j - 1][1]); } dp[c][j][0] = (ll(dp[p][j + 1][0]) * (j + 1) + ll(j) * dp[p][j + 1][1]) % MOD; if(i >= j + 2) upd(dp[c][j][0], (ll(dp[p][j][0]) * (i - j - 2) + ll(dp[p][j][1]) * (i - j - 1)) % MOD); } } printf("%d\n", dp[c][0][0]); return 0;}---------------------------------------------------------------------------------
4321: queue2
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 104 Solved: 54
[Submit][Status][Discuss]
Description
n 个沙茶,被编号 1~n。排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行; 现在想知道,存在多少方案满足沙茶们如此不苛刻的条件。Input
只有一行且为用空格隔开的一个正整数 N,其中 100%的数据满足 1≤N ≤ 1000;Output
一个非负整数,表示方案数对 7777777 取模。Sample Input
4Sample Output
2样例解释:有两种方案 2 4 1 3 和 3 1 4 2
HINT
Source
相关文章推荐
- Android动画_PropertyValuesHolder
- easyui datagrid
- 猫猫学iOS之UITextField全解
- 获取UUID
- Android GUI 之日期选择器(DatePicker)
- POJ 1019 Number Sequence(水~)
- easyui数据选择后重新定位到第一行
- AFNetWorking 关于manager.requestSerializer.timeoutInterval 不起作用的问题
- 猫猫学iOS之UITextField右边设置图片,以及UITextField全解
- UINavigationItem UINavigationBar 关系分析
- UGUI中RectTRanform笔记
- iOS开发日记56-详解UIImage
- arduino中断和一些问题
- NGUI使用教程(3) 使用外部图片制作Atlas(图集)
- request.getParameter(“参数名”) 中文乱码解决方法
- 提示框的使用->UIAlertController类的使用
- easyui整理资料
- 对easyui datagrid进行扩展,当滚动条拉直最下面就异步加载数据
- Android开发如何在getContentResolver().query()方法中实现结果去重
- easyui自定义扩展视图实现功能--------datagrid返回记录为0时显示“没有记录”