牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) D.YB要打炉石-最长上升子序列(LIS)

 

D.YB要打炉石
 
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

Wozuinb非常喜欢打炉石传说,但是菜的不行,所以他决定打
竞技场来练练手。系统按顺序给出n张卡牌,每张卡牌都有自
己的使用消耗a[i],每次只给出一张,wozuinb可以选择或者
弃掉这张牌。每选择一张牌都会按选择顺序放在卡槽中,当
卡槽中放满30张即可组成一套套牌。Wozuinb希望自己的套牌的
消耗满足一个平滑的曲线,即30张卡牌都满足第i张卡牌的消耗
不小于第i-1张(i>1)。请你帮助wozuinb看一看,这些卡牌能不
能组成想要的套牌,如果能组成输出“yes”,如果不能输出“no”。

输入描述:

第一行输入一个整数n,0<n<100。
第二行输入一行数字a[i],每个数字用空格隔开,代表第i张出现的卡牌的消耗。

输出描述:

输出一行,“yes”或“no”
示例1

输入

5
1 2 3 4 5

输出

no




 

 

这个题题目上说按顺序出牌,所以不能排序,只能选择要不要,所以就想到是最长上升子序列问题。有毒,多组输入一直wa,改了多组输入就可以了,不知道为什么,感觉初始化什么的没写错。。。

 

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<string.h>
 7 #include<set>
 8 #include<vector>
 9 #include<queue>
10 #include<stack>
11 #include<map>
12 #include<cmath>
13 using namespace std;
14 typedef long long ll;
15 const int inf=0x3f3f3f3f;
16 double PI=acos(-1.0);
17 const int maxn=1e6+100;
18 #include<cstdio>
19 const int MAX=1001;
20 int a[MAX];
21 int lis(int x){
22     int num[MAX];
23     for(int i=0;i<x;i++){
24         num[i]=1;
25         for(int j=0;j<i;j++)
26         {
27             if(a[j]<=a[i]&&num[j]+1>num[i])
28                    num[i]=num[j]+1;
29         }
30     }
31     int maxx=0;
32     for(int i=0;i<x;i++)
33         if(maxx<num[i])
34             maxx=num[i];
35     return maxx;
36 }
37 int main(){
38     int n;
39     scanf("%d",&n);
40     for(int i=0;i<n;i++)
41         scanf("%d",&a[i]);
42     if(lis(n)>=30)
43         printf("yes\n");
44     else
45         printf("no\n");
46 }

 

posted @ 2018-01-29 13:46  ZERO-  阅读(283)  评论(0编辑  收藏  举报