日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FOJ Problem 2253 Salty Fish

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FOJ Problem 2253 Salty Fish 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Problem 2253 Salty Fish

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 0

Sample Output

4 2

Hint

對于第一個樣例,翻轉區間[2,3],序列變為1 1 1 1 0。

對于第二個樣例,翻轉整個區間,序列變為1 0 1。?

?

思路:最大連續子區間和問題,考慮兩部分,第一:記錄好原本的序列中1的個數sum1 第二:現在要反轉一個區間,此時對原串修改,0的部分改成1,1的部分改成-1,因為每次反轉,原本沒翻身的魚翻身了,則翻身的魚個數+1,而原本翻身的魚又變回咸魚,翻身魚個數-1,對修改后的串求最大連續子區間和sum2,sum1+sum2即是最優解。當然本題需要注意如果所有魚本來都是1的狀態,則至少需要翻轉一條,最佳方案則為n-1.

AC代碼:

#define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<set> #include<vector> #include<algorithm> #include<cstring> using namespace std; const int N_MAX = 100000+50; int fish[N_MAX],a[N_MAX]; int n; int main() {while (scanf("%d",&n)!=EOF) {int sum = 0;for (int i = 0; i < n;i++) {scanf("%d",&fish[i]);if (fish[i]) { sum += fish[i], a[i] = -1; }else a[i] = 1;}int sum2 = 0,max_sum=a[0];for (int i = 0; i < n;i++) {if(sum2>0)sum2 += a[i];else sum2 = a[i];max_sum = max(max_sum, sum2);}printf("%d\n",max_sum+sum);}return 0; }

?

轉載于:https://www.cnblogs.com/ZefengYao/p/7192290.html

總結

以上是生活随笔為你收集整理的FOJ Problem 2253 Salty Fish的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。