点击打开链接http://acm.hdu.edu.cn/showproblem.php?pid=1422
这题目很简单,不要想复杂,不是背包问题,而且有一点得注意,参观城市顺序为环形,且不能跳跃参观,
例如a-b-c-d-e-a,a-c-d-e这样的参观不算,这样为c-d-e三个城市,就是不能跳跃参观;
/* ***********************************************
Author :小蔡虎
Created Time :2014/4/21 20:40:18
File Name :E:\2014ACM\动态规划\重温世界杯
************************************************ */
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#define PI 3.141592654
#define MA 200010
#define max(a,b) a>b? a:b
using namespace std;
/*给出N个城市,每个城市提供费用a,花费b,求资金>=0的情况下,最多能参观多少城市;
思路:像求序列最长的正整数和,先做相减处理,然后就算吧;
请注意;一开始我想复杂了,要求参观的城市是连续的,不能跳跃参观,例如a-b-c-d-e,
要求环形顺序参观,不能跳跃,a-c-d-e这样是不行的;
*/
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,s,k,a,b,cost[MA]={0};
int sum=-99999999;
for(i=1; i<=n; i++)
{
scanf("%d%d",&a,&b);
cost[i]=cost[i+n]=a-b;
}
for(i=1,k=0; i<=2*n; i++)
{
cost[i]+=cost[i-1];//cost[i]为当前钱数
if(cost[i]>=0)
{
k++;
}
else
{
k=0;//更新记录
cost[i]=0;//当前钱数重新开始
}
sum=max(sum,k);//取最大记录值
if(sum>=n)
break;
}
printf("%d\n",sum);
}
return 0;
}