BZOJ4321queue2——DP/递推
题目描述
输入
输出
样例输入
样例输出
样例解释:有两种方案 2 4 1 3 和 3 1 4 2
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define mod 7777777
using namespace std;
int n;
ll f[1010];
int main()
{
scanf("%d",&n);
f[0]=f[1]=1ll;
f[2]=f[3]=0ll;
for(int i=4;i<=n;i++)
{
f[i]=1ll*f[i-1]*(i+1)%mod-1ll*f[i-2]*(i-2)%mod-1ll*f[i-3]*(i-5)%mod+1ll*f[i-4]*(i-3)%mod;
f[i]=(f[i]%mod+mod)%mod;
}
printf("%lld",f[n]);
}
$DP$做法:考虑对于前$i$个数的排列,当加入$i+1$时对排列的影响,设$f[i][j]/g[i][j]$分别表示前$i$个数的排列中有$j$对相差为$1$的数相邻(后文称为不合法数对)且$i$两边有/没有与它相差为1的的数。
考虑这两个方程如何转移,对于$f[i][j]$,加入$i+1$:
1、与$i$相邻且增加一对不合法数对,有一种放法,可转移到$f[i+1][j+1]$
2、与$i$相邻且不合法数对数不变,有一种放法,可转移到$f[i+1][j]$
3、与$i$不相邻且减少一对不合法数对,有$(j-1)$种放法,可转移到$g[i+1][j-1]$
4、与$i$不相邻且不合法数对数不变,有$(i-j)$种放法,可转移到$g[i+1][j]$
对于$g[i][j]$,加入$i+1$:
1、与$i$相邻且增加一对不合法数对,有两种放法,可转移到$f[i+1][j+1]$
2、与$i$不相邻且减少一对不合法数对,有$j$种放法,可转移到$g[i+1][j-1]$
3、与$i$不相邻且不合法数对数不变,有$(i-j-1)$种放法,可转移到$g[i+1][j]$
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define mod 7777777
using namespace std;
int n;
ll f[1010][1010];
ll g[1010][1010];
int main()
{
scanf("%d",&n);
g[1][0]=1;
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
(f[i+1][j+1]+=f[i][j])%=mod;
(f[i+1][j]+=f[i][j])%=mod;
(g[i+1][j-1]+=1ll*(j-1)*f[i][j])%=mod;
(g[i+1][j]+=1ll*(i-j)*f[i][j])%=mod;
(f[i+1][j+1]+=2*g[i][j])%=mod;
(g[i+1][j-1]+=1ll*j*g[i][j])%=mod;
(g[i+1][j]+=1ll*(i-j-1)*g[i][j])%=mod;
}
}
printf("%lld",g[n][0]);
}
BZOJ4321queue2——DP/递推的更多相关文章
- hdu2089(数位DP 递推形式)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 2604 Queuing(dp递推)
昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜 ...
- Power oj2498/DP/递推
power oj 2498 /递推 2498: 新年礼物 Time Limit: 1000 MS Memory Limit: 65536 KBTotal Submit: 12 Accepted: 3 ...
- Shell Necklace (dp递推改cdq分治 + fft)
首先读出题意,然后发现这是一道DP,我们可以获得递推式为 然后就知道,不行啊,时间复杂度为O(n2),然后又可以根据递推式看出这里面可以拆解成多项式乘法,但是即使用了fft,我们还需要做n次多项式乘法 ...
- hdu 1723 DP/递推
题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...
- UVA 10559 Blocks(区间DP&&递推)
题目大意:给你玩一个一维版的消灭星星,得分是当前消去的区间的长度的平方,求最大得分. 现在分析一下题目 因为得分是长度的平方,不能直接累加,所以在计算得分时需要考虑前一个状态所消去的长度,仅用dp[l ...
- [NOI2009]管道取珠 DP + 递推
---题面--- 思路: 主要难点在思路的转化, 不能看见要求$\sum{a[i]^2}$就想着求a[i], 我们可以对其进行某种意义上的拆分,即a[i]实际上可以代表什么? 假设我们现在有两种取出某 ...
- HDU 2154 跳舞毯 | DP | 递推 | 规律
Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥. 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是 ...
- HDU 5366 dp 递推
The mook jong Accepts: 506 Submissions: 1281 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
随机推荐
- 朱晔和你聊Spring系列S1E3:Spring咖啡罐里的豆子
标题中的咖啡罐指的是Spring容器,容器里装的当然就是被称作Bean的豆子.本文我们会以一个最基本的例子来熟悉Spring的容器管理和扩展点. 阅读PDF版本 为什么要让容器来管理对象? 首先我们来 ...
- Continued Fractions CodeForces - 305B (java+高精 / 数学)
A continued fraction of height n is a fraction of form . You are given two rational numbers, one is ...
- 逻辑回归为什么用sigmoid函数
Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷. 因此,使用logistic函数(或称作sigmoid函数)将自 ...
- Problem 2285 迷宫寻宝
http://acm.fzu.edu.cn/problem.php?pid=2285 Problem Description 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入 ...
- MySQL数据库性能优化思路与解决方法(一转)
1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越 小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设 ...
- 数据处理 array json 格式 转换成 数组形式
处理这种数据应该使用的方式是 this.cities= res.data.data.cities.sort((a,b)=>{ //排序 进行字母排序 return a.pinyin[0].cha ...
- vue传参
<template> <ul> <li v-for="item in list" :key="item.id"> <b ...
- Windows 下 Mysql8.0.12 的安装方法
1. 之前在windows 上面安装了 mysql 5.6 还有 mysql 5.7 遇到了几个坑 , 最近想直接安装最新版的 mysql 8.0.12(较新) 发现还是有坑 跟之前的版本不一样 这里 ...
- PMP三点
三点估算:悲观36天,可能21天,乐观6天.在16至26天内完成的概率是多少?这个算法是PERT估算最终估算结果=(悲观工期+乐观工期+4×最可能工期)/6=(36+6++4*21)/6=21标准差= ...
- 建议2---编写pythonic代码
(1)要避免劣化代码 1)避免只用大小写来区分不同的对象.如a是一个数值类型变量,A是String类型,虽在编码过程容易区分二者的含义,但这样做毫无益处,它不会给其他阅读代码的人带来多少便利. 2)避 ...