• Educational Codeforces Round 80 (Rated for Div. 2)(C


    C - Two Arrays

    题目链接:https://codeforces.com/contest/1288/problem/C

    题目:

        

     

     题意:给你n,m,利用1~n之间的数(可重复)来组成长度为m的数组a,b,要求数组a非递减,数组b非递增,且a数组的数《=b数组中的数,求出a,b数组对数

     思路:用动态规划,dp[i][j]是第i个位置放数字j的方案数,根据题意可以将b数组反置然后接在a后面,则该数组长度为2m,为一个非递减序列,则就是求1~n这些数字可重复组成多少种长度为2m的非递减序列,可发现在第i位置放j-1必然在第i-1位置放j数字,所以可以得出状态方程dp[i][j]=dp[i-1][j]+dp[i][j-1].

    //
    // Created by HJYL on 2020/1/14.
    //
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e3+10;
    const int mod=1e9+7;
    int main()
    {
        //freopen("text","r",stdin);
        int n,m;
        scanf("%d%d",&n,&m);
        int dp[100][maxn];
        for(int i=1;i<=n;i++)
            dp[1][i]=1;//dp初始化
        for(int i=2;i<=n;i++)
        {
            for(int j=1;j<=n;j++) {
                dp[i][j]=(dp[i][j-1]+dp[i-1][j])%mod;//dp[i][j]表示第i位置放数字j的方案数,在i位置放j-1情况时必然i-1位置也能放j
            }
        }
        int res=0;
        for(int i=1;i<=n;i++)
        {
            res+=dp[2*m][i];//在该长度为2m数组中最后一个位置放1~n的情况之和
            res%=mod;
        }
        printf("%d
    ",res);
        return 0;
    }
  • 相关阅读:
    2013.11.18 流水
    return to blog!
    IOS实现毛玻璃效果的三种方式
    UI常用控件总结(三)
    UI常用控件总结(二)
    UI常用控件总结(一)
    UIView 常见属性
    OC语言BLOCK和协议
    OC语言类的深入和分类
    OC语言构造方法
  • 原文地址:https://www.cnblogs.com/Vampire6/p/12198070.html
Copyright © 2020-2023  润新知