首页 > 代码库 > 10月18日随笔

10月18日随笔

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<queue>
 7 using namespace std;
 8 typedef long long LL;
 9 inline int read()
10 {
11     int x=0,f=1;char c=getchar();
12     while(!isdigit(c)){if(c==-)f=-1;c=getchar();}
13     while(isdigit(c)){x=x*10+c-0;c=getchar();}
14     return x*f;
15 }
16 bool ok[50001];
17 int a[5001],b[5001],f[5001],n,k,maxn,num;
18 int main()
19 {
20     n=read();
21     for(int i=1;i<=n;i++)a[i]=read();
22     b[1]=1;f[1]=1;
23     for(int i=1;i<=n+1;i++)//边界定为n+1,这里默认a[i]为0,满足最长下降序列 
24     {
25         maxn=0;
26         f[i]=1;
27         for(int j=i-1;j>=1;j--)//从以前的找 
28             if(a[i]<a[j])//
29                 if(b[j]>maxn)//更新 
30                 {
31                     maxn=b[j];
32                     memset(ok,1,sizeof(ok));
33                     ok[a[j]]=false;
34                     f[i]=f[j];//更新方案数 
35                 }
36                 else if(b[j]==maxn && ok[a[j]])// 
37                 {
38                     ok[a[j]]=false;
39                     f[i]+=f[j];
40                 }
41         b[i]=maxn+1;
42     }
43     printf("%d %d\n",b[n+1]-1,f[n+1]);//以0为结尾的最长下降序列, 
44     return 0;
45 }
46 /*
47 12
48 68 69 54 70 68 64 70 67 78 62 98 87
49 */

今天是10月18日,还有几天就开始初赛了。昨天出月考排名了,本以为会颓废,结果发现排名还凑活:64,按理说这个排名很低了,但是以我这个分数排名这么靠前已经非常出乎我的意外了。希望期中能考好一点。

10月18日随笔