codeforces 1288C. Two Arrays(dp)
链接:https://codeforces.com/contest/1288/problem/C C. Two Arrays 题意:给定一个数n和一个数m,让构建两个数组a和b满足条件,1.数组中所有元素的取值在1~n之间,a和b数组长度是m。2. a数组是单调不递减的,b数组是单调不递增 3. 任意的位置i,有a i <=b i 思路:可以组合数学做,也可以dp,以下为dp做法。首先如果把a、b两个数组合并成 a 1 ,a 2 ,a 3 ,.......a m ,b m ,b m-1 ,b m-2 ,b m-3 ...........b 3 ,b 2 ,b 1, 会发现整个数列是单调不递减的,那么就可以dp做了, dp[i][j]表示第i个位置可以放 大于等于 j 的方案数 ,那么转移方程就是 dp[i][j] = dp[i-1][j] + dp[i][j+1] AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 #include<queue> 7 using namespace std; 8 typedef long long ll; 9 const int maxm = 12 ; 10 const int