程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU - 1422 重溫世界杯

HDU - 1422 重溫世界杯

編輯:C++入門知識

Description

世界杯結束了,意大利人連本帶利的收回了法國人6年前欠他們的債,捧起了大力神杯,成就了4星意大利.
世界杯雖然結束了,但是這界世界杯給我們還是留下許多值得回憶的東西.比如我們聽到了黃名嘴的3分鐘激情解說,我們懂得了原來可以向同一個人出示3張黃牌,我們還看到了齊達內的頭不僅能頂球還能頂人…………
介於有這麼多的精彩,xhd決定重溫德國世界杯,當然只是去各個承辦世界杯比賽的城市走走看看.但是這需要一大比錢,幸運的是xhd對世界杯的熱愛之情打動了德國世界杯組委會,他們將提供xhd在中國杭州和德國任意世界杯承辦城市的往返機票,並說服了這些城市在xhd到達這座城市時為他提供一筆生活費以便他在那裡參觀時用,當參觀完時剩余的錢也將留給xhd,但當生活費不夠時他們將強行結束xhd的這次德國之行,除了這個,他們還有一個條件,xhd只能根據他們所給的路線參觀.比如有3座城市a,b,c,他們給定了a-b-c-a的路線,那麼xhd只有3種參觀順序abc,bca,cab.由於各個城市所提供的生活費和在那裡的花費都不同,這使xhd很頭痛,還好我們事先知道了這筆生活費和花費.請問xhd最多能順利參觀幾座城市?

Input

每組輸入數據分兩行,第一行是一個正整數n(1<=n<=100000),表示有n座城市.接下來的一行按照給定的路線順序的輸出這n個城市的生活費和花費,w1,l1,w2,l2,……,wn,ln,其中wi,li分別表示第i個城市的生活費和花費,並且它們都是正整數.

Output

對應每組數據輸出最多能參觀的城市數.

Sample Input

 3
3 2 3 4 2 2
3
3 2 3 4 2 3 

Sample Output

 3
2 
思路:先做相減的處理,然後就是有點像求序列最長的正整數和
#include 
#include 
#include 
#include 
using namespace std;
const int MAXN = 100005;

int arr[MAXN*3];
int n,dp[MAXN*3];
int sum[MAXN];

int main(){
	while (scanf("%d",&n) != EOF){
		for (int i = 1; i <= n; i++){
			int x,y;
			scanf("%d%d",&x,&y);
			arr[i] = x-y;
		}
	
		for (int i = 1; i <= n; i++)
			arr[i+n] = arr[i];
		memset(dp,0,sizeof(dp));
		int ans = 0;
		sum[0] = 0;
		arr[0] = 0;
		for (int i = 1; i <= n*2; i++){
			if (arr[i]+sum[i-1] >= 0){
				dp[i] = dp[i-1] + 1;
				sum[i] = arr[i] + sum[i-1];
				ans = max(ans,dp[i]);
				if (ans == n)
					break;
			}
			else if (arr[i] >= 0 && sum[i-1] < 0){
				dp[i] = 1;
				sum[i] = 0;
			}
			else {
				dp[i] = 0;
				sum[i] = 0;
			}
		}
		cout << ans << endl;
	}
	return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved