首页 > 其他 > 详细

cf 1288 补题

时间:2020-01-19 19:39:36      阅读:59      评论:0      收藏:0      [点我收藏+]

C题题意:

给你两个数n,m ; m为数组长度,数组内的数据范围为1到n。

  • 对任意i,有a[i] <= b[i]
  • 数组a为非降序
  • 数组b为非升序

结果可能非常大,您应该以10^9+7模数打印它。

Input

n m (1≤n≤1000, 1≤m≤10).

Output

打印一个整数-满足上述条件的数组a和b的个数对10^9+7取模的结果。

分析:

分析一下题目,a[i]<=b[i]
数组a为非降序,则a1为最小的数
数组b为非升序,则b1为最大的数

则将b数组倒序(b就变为非降序了),和a数组形成了一个非降序的c数组

问题就变成了,求在1到n中有多少个满足条件的c数组

dp[i] [j]指的是对于数组长度为i,且最后一位为j并满足条件的个数

则最后结果sum为dp[2*m] [j] 从1到 n 之和

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MA=10005;
const int mod=1e9+7;
ll dp[MA][MA];
int main(){
    int n,m;
    cin>>n>>m;
    for(int j=1;j<=n;j++){
        dp[1][j]=1;
    }
    for(int i=2;i<=2*m;i++){
        for(int j=1;j<=n;j++){
            for(int k=j;k>=1;k--){
                dp[i][j]+=dp[i-1][k];
                dp[i][j]%=mod;
            }
        }
    }
    ll sum=0;
    for(int j=1;j<=n;j++){
        sum+=dp[2*m][j];
        sum%=mod;
    }
    cout<<sum<<endl;
    return 0;
}  

cf 1288 补题

原文:https://www.cnblogs.com/w-w-t/p/12215257.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!