51nod 1250 排列与交换——dp
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1250
仔细思考dp。
第一问,考虑已知 i-1 个数有多少种方案。再放入一个数,它是最大的且在最后面,所以它的位置不同的话,就是不同的方案。它在特定的位置,其余部分的值就是 i-1 的值。
所以再用前缀和优化成 n^2 即可。k可减任意个2。
第二问,还是像上面一样考虑。但新来的数只会和前面的数交换一次。任何一种交换 k ( k>1 ) 次的方案都可以转换成前面的数先交换 k-1 次,再由新来的数交换一次。所以就能很方便地dp了。
还可以从逆序对的角度考虑第一问、从斯特林数的角度考虑第二问。反正式子是一样的。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const int N=3005,mod=1e9+7; int n,k,dp[2][N],c[2][N],ans,u,v; int main() {scanf("%d%d",&n,&k);dp[1][0]=1;for(int i=0;i<=k;i++) c[1][i]=1;u=0;v=1;for(int i=2;i<=n;i++){for(int j=0;j<=k;j++){dp[u][j]=(c[v][j]-(j-i>=0?c[v][j-i]:0)+mod)%mod;c[u][j]=(dp[u][j]+(j?c[u][j-1]:0))%mod;}u=!u;v=!v;}for(int i=k;i>=0;i-=2) (ans+=dp[v][i])%=mod;printf("%d ",ans); ans=0;u=0;v=1;memset(dp[1],0,sizeof dp[1]); dp[1][0]=1;for(int i=2;i<=n;i++){for(int j=0;j<=k;j++)dp[u][j]=(dp[v][j]+(j?(ll)dp[v][j-1]*(i-1)%mod:0))%mod;u=!u;v=!v;}for(int i=0;i<=k;i++) (ans+=dp[v][i])%=mod;printf("%d\n",ans);return 0; }
转载于:https://www.cnblogs.com/Narh/p/9606366.html
51nod 1250 排列与交换——dp相关推荐
- 51nod 1843 排列合并机【DP去重】Ender的模拟赛
题目描述 有两个1~n的排列A,B,序列C一开始为空,每次可以选择进行以下两种操作之一 1)若A不为空,则可取出A的开头元素放在序列C的末尾 2)若B不为空,则可取出B的开头元素放在序列C的末尾 这样 ...
- JZOJ 5253. 排列与交换
Description 一个数组A = [1, 2, 3, -, n]. 对A进行好恰好k次相邻交换,能得到多少个不同的序列 (S1)? 对A进行最多k次交换,你能得到多少个不同的序列 (S2)? 一 ...
- 51nod 1574 排列转换 codeforce584E. Anton and Ira
文章目录 题目链接: 题目链接: 51nod 1574 cf584E 先转换一哈题意,就是乱序的排列,把他变成有序的,交换两个数的代价是两个数下标的绝对值,问最小的代价 我就按顺序来,从小到大依次把每 ...
- 1603 限高二叉排列树(计数DP)
1603 限高二叉排列树 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 作为游戏魔方的编写者和管理员,Bob在很多主存模块中检测 ...
- 51nod 1574: 排列转换
1574 排列转换 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 现在有两个长度为n的排列p和s.要求通过交换使 ...
- 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)...
题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...
- 51nod 1299 监狱逃离 树形DP
传送门:51nod 1299 题意:中文题. 思路: //dp[i]表示警察全部放置完成后i节点的状态 //0 表示逃犯不能到达i节点并且i节点能(经由其子树)到达出口(不经过警察的情况下) //1 ...
- 【算法】三色小球,相邻颜色不同,排列方案(DP)
假设有三种颜色小球,每种颜色各n个,问:相邻颜色不同的情况下,有多少中排列方法? (同色小球没有区别,输出取模998244353) #include <bits/stdc++.h> usi ...
- 51Nod 1522 上下序列 —— 区间DP
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1522 区间DP,从大往小加: 新加入一种数有3种加法:全加左边,全 ...
最新文章
- python五:运算符
- easy_runner一个简单的压测程序
- mysql 线上加索引_MySQL加索引都经历了什么?
- mysql密码正确但无法连接【彻底解决方案】
- 找呀志_ContentResolver操作ContentProvider数据
- java jre 中导入导出证书
- 新的开始 | Arthas GitHub Star 破万后的回顾和展望
- JavaScript基础(3)-JS中的面向对象、定时器、BOM、位置信息
- 微信公众帐号开发教程第8篇-文本消息中使用网页超链接
- python3生成验证码_Python3实现生成验证码图片
- 控制反转(IOC)入门
- c++之EXTERN详细讲解
- PKPM200608/CARD-1 8.0/TPM5000/神机妙算(黄狗)/桥梁通7.09/福莱一点通8.3/纬地5.82
- selenium弹窗处理,包括Javascript弹窗、HTML弹出层和Windows弹窗
- excel导出动态表头以及二级三级表头,还有数据库动态的数据来源
- 羊皮卷之七 我要笑遍世界
- walking机器人入门教程-软件清单
- Iterative closest point (ICP) 算法
- (旧)子数涵数·PS——冷色调与LOMO
- 2019纪中寒假培训