题目: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相关推荐

  1. 51nod 1843 排列合并机【DP去重】Ender的模拟赛

    题目描述 有两个1~n的排列A,B,序列C一开始为空,每次可以选择进行以下两种操作之一 1)若A不为空,则可取出A的开头元素放在序列C的末尾 2)若B不为空,则可取出B的开头元素放在序列C的末尾 这样 ...

  2. JZOJ 5253. 排列与交换

    Description 一个数组A = [1, 2, 3, -, n]. 对A进行好恰好k次相邻交换,能得到多少个不同的序列 (S1)? 对A进行最多k次交换,你能得到多少个不同的序列 (S2)? 一 ...

  3. 51nod 1574 排列转换 codeforce584E. Anton and Ira

    文章目录 题目链接: 题目链接: 51nod 1574 cf584E 先转换一哈题意,就是乱序的排列,把他变成有序的,交换两个数的代价是两个数下标的绝对值,问最小的代价 我就按顺序来,从小到大依次把每 ...

  4. 1603 限高二叉排列树(计数DP)

    1603 限高二叉排列树 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 作为游戏魔方的编写者和管理员,Bob在很多主存模块中检测 ...

  5. 51nod 1574: 排列转换

    1574 排列转换 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 现在有两个长度为n的排列p和s.要求通过交换使 ...

  6. 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)...

    题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...

  7. 51nod 1299 监狱逃离 树形DP

    传送门:51nod 1299 题意:中文题. 思路: //dp[i]表示警察全部放置完成后i节点的状态  //0 表示逃犯不能到达i节点并且i节点能(经由其子树)到达出口(不经过警察的情况下) //1 ...

  8. 【算法】三色小球,相邻颜色不同,排列方案(DP)

    假设有三种颜色小球,每种颜色各n个,问:相邻颜色不同的情况下,有多少中排列方法? (同色小球没有区别,输出取模998244353) #include <bits/stdc++.h> usi ...

  9. 51Nod 1522 上下序列 —— 区间DP

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1522 区间DP,从大往小加: 新加入一种数有3种加法:全加左边,全 ...

最新文章

  1. python五:运算符
  2. easy_runner一个简单的压测程序
  3. mysql 线上加索引_MySQL加索引都经历了什么?
  4. mysql密码正确但无法连接【彻底解决方案】
  5. 找呀志_ContentResolver操作ContentProvider数据
  6. java jre 中导入导出证书
  7. 新的开始 | Arthas GitHub Star 破万后的回顾和展望
  8. JavaScript基础(3)-JS中的面向对象、定时器、BOM、位置信息
  9. 微信公众帐号开发教程第8篇-文本消息中使用网页超链接
  10. python3生成验证码_Python3实现生成验证码图片
  11. 控制反转(IOC)入门
  12. c++之EXTERN详细讲解
  13. PKPM200608/CARD-1 8.0/TPM5000/神机妙算(黄狗)/桥梁通7.09/福莱一点通8.3/纬地5.82
  14. selenium弹窗处理,包括Javascript弹窗、HTML弹出层和Windows弹窗
  15. excel导出动态表头以及二级三级表头,还有数据库动态的数据来源
  16. 羊皮卷之七 我要笑遍世界
  17. walking机器人入门教程-软件清单
  18. Iterative closest point (ICP) 算法
  19. (旧)子数涵数·PS——冷色调与LOMO
  20. 2019纪中寒假培训

热门文章

  1. uva 10396——Vampire Numbers
  2. json格式与cJSON函数库
  3. c++中STL实现演讲比赛流程
  4. linux 消息队列机制
  5. C++Primer学习笔记:第6章 函数
  6. C++单例模式简单实现
  7. shared_ptr简介以及常见问题
  8. 1026 程序运行时间 (15 分
  9. 不愧是Alibaba技术官,java数组实现单向链表
  10. 解析底层原理!Android开发者面试如何系统复习?帮你突破瓶颈