Salty Fish(區間和)
阿新 • • 發佈:2017-07-16
one rec namespace printf mage amp print opened ron Problem 2253 Salty Fish
Accept: 35 Submit: 121
有個坑,因為必須要翻一次!
Accept: 35 Submit: 121
Time Limit: 1000 mSec Memory Limit : 32768
KB
Problem Description
海邊躺著一排鹹魚,一些有夢想的鹹魚成功翻身(然而沒有什麽卵用),一些則是繼續當鹹魚。一個善良的漁夫想要幫這些鹹魚翻身,但是漁夫比較懶,所以只會從某只鹹魚開始,往一個方向,一只只鹹魚翻過去,翻轉若幹只後就轉身離去,深藏功與名。更準確地說,漁夫會選擇一個區間[L,R],改變區間內所有鹹魚的狀態,至少翻轉一只鹹魚。
漁夫離開後想知道如果他采取最優策略,最多有多少只鹹魚成功翻身,但是鹹魚大概有十萬條,所以這個問題就交給你了!
Input
包含多組測試數據。
每組測試數據的第一行為正整數n,表示鹹魚的數量。
第二行為長n的01串,0表示沒有翻身,1表示成功翻身。
n≤100000
Output
在漁夫的操作後,成功翻身鹹魚(即1)的最大數量。
Sample Input
5 1 0 0 1 0 3 0 1 0Sample Output
4 2Hint
對於第一個樣例,翻轉區間[2,3],序列變為1 1 1 1 0。
對於第二個樣例,翻轉整個區間,序列變為1 0 1。
Source
福州大學第十四屆程序設計競賽_重現賽 //對於 1 的魚,翻身收益 -1 ,對於 0 的魚,收益為 1 ,先這麽處理,然後,就是求最大區間和的問題了1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 using namespace std; 5 #define MX 100010 6 7 int a[MX]; 8 9 int main() 10 { 11 int n; 12 while (scanf("%d",&n)!=EOF) 13 { 14 int sum1=0; 15 forView Code(int i=1;i<=n;i++) 16 { 17 int x; 18 scanf("%d",&x); 19 sum1+=x; 20 if (x) a[i]=-1; 21 else a[i]=1; 22 } 23 int mmm=-1,rec=0; //mmm=-1 因為必須要翻一次,全為 1 時 24 for (int i=1;i<=n;i++) 25 { 26 if (rec>0) rec+=a[i]; 27 else rec=a[i]; 28 mmm = max(rec,mmm); 29 } 30 printf("%d\n",mmm+sum1); 31 } 32 return 0; 33 }
Salty Fish(區間和)