zoukankan      html  css  js  c++  java
  • 4817 江哥的dp题d

    4817 江哥的dp题d

     

     时间限制: 1 s
     空间限制: 256000 KB
     题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

    已知1~N的排列P的LIS(最长上升子序列)不超过2,求可能的P的个数。答案取模10^9+7。

    输入描述 Input Description

    一行一个整数N。

    输出描述 Output Description

    输出一行一个整数,描述可能的排列P的个数mod1000000007的结果。

    样例输入 Sample Input

    1

    样例输出 Sample Output

    1

    数据范围及提示 Data Size & Hint

    测试点编号              数据范围
           1,2                         N≤10
           3,4                         N≤20
     5,6,7,8,9,10               N≤1000 

    AC代码:
    /*解析: 
        从小到大一个一个往数列里加数字,第一次加1,只有一种加法,第二次加2,可以加在1前或后,2种方法.....
        最长上升子序列要么是1要么是2,是1的话只有一种情况,下降序列
        f[i][j]表示已经加了前i个数字,最后一个数字(第i个数)的位置是j,满足题目要求的方案数,
        如果i不是加在第一个位置是,i+1必须在i的前面,
        否则你会形成一个3的上升子序列。
        所以当j不等于1时,你只能把i+1加到i前面。
        如果j==1,可以加到第1,2,3个位置,第四个位置就无法确定了,
        所以我们改变策略。
        f[i][j]表示前i个数字已经放好且j表示i没有放在第一个位置放在哪里的方案数。
    */
    #include<cstdio>
    using namespace std;
    const int N=1e3+10;
    const int mod=1000000007;
    int n,f[N][N]={1};
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            for(int j=0;j<=i;j++){
                f[i][j]=(f[i][j-1]+f[i-1][j])%mod;
            }
        }
        printf("%d",f[n][n]);
        return 0;
    }
  • 相关阅读:
    c#dalegate invoke及AsyncCallback使用
    wpf ProgressBar使用
    gridcontrol如何根据值来动态设置某一行的颜色
    JS判断客户端是否是iOS或者Android
    React Native视频播放(iOS)
    js中Math()函数&&数据类型转换
    在Mac OS X上安装Ionic
    Umbraco列表分页
    angularJs中图表功能(有集成框架)-angular-flot
    React Native开发环境搭建
  • 原文地址:https://www.cnblogs.com/shenben/p/6043629.html
Copyright © 2011-2022 走看看