全部评论
作者: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;
}
有大佬能解释一下转移方程吗。。。太蠢,看答案居然都看不懂
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)); } }
https://www.nowcoder.com/discuss/26079
相关推荐
点赞 评论 收藏
分享