题目链接:codeforces.com/problemset/problem/688/A
题意:给你两个数a,b。a代表有a天,b代表有b个人。现在输入a串数字让你统计连续少于b个人的天数的最大值
题目思路:这道题的核心是最大上升子序列(LIS)。因为有100位,所以不能用int写。我开了字符串的二维数组。用最大上升子序列算法的时候,注意循环是从1开始的,这里就要先判断a[0]这个情况是否为1( b[i]=max(b[i],b[i-1]+1) )
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
#include<map>
#include<vector>
#include<set>
#include<queue>
using namespace std;
const int maxn=110;
const int INF=0x3f3f3f3f;
char s[maxn][maxn];
int a[maxn],b[maxn];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<m;i++)
{
scanf("%s",s[i]);
for(int j=0;j<n;j++)
{
if(s[i][j]=='1')
a[i]++;
}
}
if(a[0]<n)
b[0]=1;
int ans=0;
for(int i=1;i<m;i++)
{
if(a[i]<n)
{
b[i]=max(b[i],b[i-1]+1);
}
else
b[i]=0;
}
int k=0;
for(int i=0;i<m;i++)
{
if(b[i]>b[k])
k=i;
}
cout<<b[k]<<endl;
}