HT的奖金
五一将近,HT所在的公司又要发节日慰问金了,但他们发奖金的方式非常奇特,老板会拿着N(N<=4000)张百元大钞到HT面前,让HT从中选出连续的K张,并要求这K张的连号的(但它们可以不是按顺序排列的)。现在HT想知道,对于给定的钞票序列,他最多能拿到多少奖金呢=,=
Input
一个整数N,表示一共有N张钞票
接下来N行,按顺序给出每张钞票的编号。钞票编号以两个大写字母HT开头,后面紧跟8个数字。【假设这里木有假钞,所以也不可能有同号的钞票。。。】
Output
一个整数P,表示HT最多能得到的奖金数目
Sample Input
5 HT00000001 HT00000006 HT00000002 HT00000004 HT00000003
Sample Output
300
Hint
每张都是百元大钞哦~
Source
就是找最大的连续位置数字,属于区间覆盖问题,做过好多次了还是不会自己写。。。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 4011;
int a[N], b[N], dp[N];
int main()
{
int n;
char x, y;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf(" %c%c%d",&x, &y, &a[i]);
}
int length=0;
for(int i=0;i<n;i++)
{
int Max=a[i], Min=a[i];
for(int j=i;j<n;j++)
{
Max=max(Max,a[j]);
Min=min(Min,a[j]);
if(Max-Min+1==j-i+1&&j-i+1>length)
{
length=j-i+1;
}
}
}
cout<<length*100<<endl;
}
return 0;
}