HDU 4883 (BC#2 1001题)TIANKENG’s restaurant(水)

题目地址:HDU 4883

唉。。最近得了一种惯性。。刚学了什么就碰到个类似的就想用刚学的算法。。。原来这题如此简单。。当时真是想多了。。。。

只要在需要变化的点上设置一个值,是增多少还是减多少。然后当遍历过来的时候加上或减去这个值就行了。。。

代码如下:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include<algorithm>

using namespace std;
int a[11000], dp[11000];
int main()
{
    int t, n, i, a1, b1, a2, b2, l, r, x, min1;
    scanf("%d",&t);
    while(t--)
    {
        memset(a,0,sizeof(a));
        memset(dp,0,sizeof(dp));
        x=0;
        min1=-1;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d%d:%d%d:%d",&x,&a1,&b1,&a2,&b2);
            l=a1*60+b1;
            r=a2*60+b2;
            a[l]+=x;
            a[r]-=x;
        }
        x=a[0];
        dp[0]=x;
        for(i=1;i<=1440;i++)
        {
            dp[i]=dp[i-1]+a[i];
        }
        for(i=0;i<=1440;i++)
        {
            if(min1<dp[i])
                min1=dp[i];
        }
        printf("%d\n",min1);
    }
    return 0;
}


你可能感兴趣的:(编程,算法,C语言,HDU)