BNUOJ 14519

HT的奖金

2000ms
65536KB
64-bit integer IO format:  %lld      Java class name:  Main
Font Size:   

五一将近,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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值