首页 > 其他 > 详细

合唱队

时间:2017-09-01 22:02:20      阅读:313      评论:0      收藏:0      [点我收藏+]

技术分享

这道题就是普通的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 }

 

合唱队

原文:http://www.cnblogs.com/fengzhiyuan/p/7465141.html

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