百度笔试第三题,大佬们求答案

我是在全排列的基础上做的

超时了 只过了30%,大佬们求答案

蟹蟹~~~~
#百度#
全部评论
https://www.nowcoder.com/discuss/26079
点赞 回复
分享
发布于 2017-04-27 21:20
import java.util.Scanner; /** * Created by qiudeyang on 27/04/17. */ public class Main { public static int helper(int n,int k){ int[][] ans = new int[n+1][k+1]; for(int i=0;i<= n;i++) { ans[i][0]=1; } for(int i=0;i<= k;i++) { ans[0][i]=0; } for(int i=1;i<=n;i++) for(int j=1;j<=k;j++) { ans[i][j]=ans[i-1][j]*(j+1)+ans[i-1][j-1]*(i-j); ans[i][j]%=2017; } return ans[n][k]; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); System.out.println(helper(n,k)); } }
点赞 回复
分享
发布于 2017-04-27 21:24
博乐游戏
校招火热招聘中
官网直投
作者:NotDeep 链接:https://www.nowcoder.com/discuss/26079 来源:牛客网 不等式数列 分析 dp[i][j]表示前i个数字构成的数列中,恰有j个‘<’号的方案数(‘>’号就有i - j - 1个)。 dp[i][j] = dp[i - 1][j - 1] * (i - j) + dp[i - 1][j] * (j + 1) 参考code #include <bits/stdc++.h> using namespace std; int n, k, ans; int dp[1005][1005]; int main() { cin >> n >> k; for(int i = 1; i <= n; i++) dp[i][0] = 1; for(int i = 2; i <= n; i++) for(int j = 1; j <= k; j++) dp[i][j] = (dp[i - 1][j - 1] * (i - j) + dp[i - 1][j] * (j + 1)) % 2017; cout << dp[n][k] % 2017 << endl; return 0; } 有大佬能解释一下转移方程吗。。。太蠢,看答案居然都看不懂
点赞 回复
分享
发布于 2017-04-27 21:34

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务