zoukankan      html  css  js  c++  java
  • cf 1288 补题

    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;
    }  
    
  • 相关阅读:
    学生信息录入系统
    作业11(增删改查listview)
    作业10(qq增删改查)
    作业9
    作业8
    作业7
    右键打开Windows Terminal
    axure 动态面板中滚动条
    TortoiseSVN服务端的配置与使用
    hfs使用小技巧
  • 原文地址:https://www.cnblogs.com/w-w-t/p/12215257.html
Copyright © 2011-2022 走看看