zoukankan      html  css  js  c++  java
  • bzoj1996 [Hnoi2010]chorus 合唱队

    这道题就是普通的dp表示i到j的范围内最后是从左加入还是从右加入,然后判断条件是否符合就可以了。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstring>
     6 using namespace std;
     7 
     8 const int mod=19650827,NN=1007;
     9 
    10 int n,i,j;
    11 int a[NN],f[NN][NN][2]={0};
    12 
    13 int main()
    14 {
    15     scanf("%d",&n);
    16     for (int i=1;i<=n;i++)
    17         scanf("%d",&a[i]);
    18     for (int i=1;i<=n;i++)
    19         f[i][i][0]=1;
    20     for(int i=n;i>=1;i--)
    21         for(int j=i+1;j<=n;j++)
    22         {
    23                if(a[j]>a[i]) f[i][j][1]+=f[i][j-1][0];
    24             if(a[j]>a[j-1]) f[i][j][1]+=f[i][j-1][1];
    25             if(a[i]<a[i+1]) f[i][j][0]+=f[i+1][j][0];
    26             if(a[i]<a[j]) f[i][j][0]+=f[i+1][j][1];
    27             f[i][j][0]%=mod;
    28             f[i][j][1]%=mod;
    29         }
    30     int ans=(f[1][n][0]+f[1][n][1])%mod;
    31     printf("%d",ans);
    32 }
  • 相关阅读:
    git学习笔记
    angular自定义指令-1
    转 三范式
    CentOS 7 安装NVIDIA驱动实现修改分辨率和扩屏功能
    acm 2034
    acm 2031
    记票统计
    acm 2020 map 逆向输出
    acm 2014
    将输入的字符一个一个读入
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/7465141.html
Copyright © 2011-2022 走看看