【百度笔试】熊熊全排列
来源:互联网 发布:黑暗之魂2猎龙枪数据 编辑:程序博客网 时间:2024/04/30 11:58
/*********************************************************************************************
度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列。但是现在度度熊手中只有k个小于符号即('<'')和n-k-1个大于符号(即'>'),度度熊想知道对于1至n任意的排列中有多少个排列可以使用这些符号使其为合法的不等式数列。
输入描述:
输入包括一行,包含两个整数n和k(k < n ≤ 1000)
输出描述:
输出满足条件的排列数,答案对2017取模。
输入例子:
5 2
输出例子
66
/*******************************************************************************************************************
思路:这一题初看很容易想到是全排列的问题,能解决,但是会超时。
【注意:本题的特点是什么?什么样的问题用到动态规划?】用动态规划的思路来求解:
dp[i][j] 表示 i 个数字以及 j 个小于号所能表示的数量(相应的,有 i-j-1 个大于号)。而插入 i+1 个数字时,会出现四种情况:
1)加在开头,等于同时加入了一个大于号。(1<2 ==> 3>1<2)
2)加到结尾,等于同时加入了一个小于号。 ( 1<2 ==> 1<2<3 )
3)加到小于号之间,等于同时加入了一个大于号。 (1<2 ==> 1<3>2 )
4)加到大于号之间,等于同时加入了一个小于号。 (2>1 ==> 2<3>1 )
j 个小于号,每个小于号都可以进行这样的一次插入
于号,而此时共有(i-j-1)个大于号。
综上: dp[i][j]=dp[i-1][j] + dp[i-1][j-1] + dp[i-1][j]*j +dp[i-1][j-1](i-j-1);
dp[i][j]=dp[i-1][j]*(j+1)+dp[i-1][j-1]*(i-j);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution1{public:int satisfiedNum(){int n, k;cin >> n >> k;vector<vector<int>> dp(n+1, vector<int>(k+1));for (int ii = 1; ii <= n; ++ii)dp[ii][0] = 1;for (int i = 2; i <= n; ++i){for (int j = 1; j <=k; ++j){dp[i][j] = (dp[i - 1][j - 1] * abs(i - j) + dp[i - 1][j] * (j + 1))%2017;}}return dp[n][k];}};int main(){Solution1 obj1;cout << obj1.satisfiedNum() << endl;return 0;}
- 【百度笔试】熊熊全排列
- 全排列(百度迅雷笔试题)
- 全排列(百度迅雷笔试题)
- 全排列(百度迅雷笔试题)
- 全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题) .
- STL系列之十 全排列(百度迅雷笔试题)
- STL之全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- STL系列之全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- STL系列之十 全排列(百度迅雷笔试题)
- sku组合查询算法探索
- 面向对象—重写(override)
- bzoj1599: [Usaco2008 Oct]笨重的石子
- HDU1850 Being a Good Boy in Spring Festival
- caffe实例之mnist
- 【百度笔试】熊熊全排列
- 1006. Sign In and Sign Out (25)
- vmstat含义说明
- 分层
- 浅谈Git
- redis的安装
- 关于 Date() 函数在 iOS 中的一个小坑
- Python Thrift示例
- 剑指offer——和为S的连续正数序列