题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1422
题目坑点,对于给出的顺序,只能从前往后走,或绕回去。不是随便排列
组合的顺序都可以走。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 100010;
int rest[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
int offer,cost;
for(int i = 0; i < n; i++)
{
scanf("%d%d",&offer,&cost);
rest[i] = offer-cost; ///算每个城市的剩余
}
int Max = 0;
int sum = 0;
int start = 0;
for(int i = 0; i < n; i++)
{
if(rest[i] < 0)
continue;
else
{
start = i;
break;
}
}
int number = 0;
for(int i = start; i < n; i++)
{
sum += rest[i];
if(sum < 0)
{
if(number > Max)
{
Max = number;
}
start = i+1;
sum = 0;
number = 0;
}
else
number++;
}
for(int i = 0; i < start; i++)
{
sum += rest[i];
if(sum < 0)
{
if(number > Max)
{
Max = number;
}
break;
}
else
number++;
}
if(number > Max)
Max = number;
printf("%d\n",Max);
}
return 0;
}