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 = +;
int fish[N_MAX],a[N_MAX];
int n;
int main() {
while (scanf("%d",&n)!=EOF) {
int sum = ;
for (int i = ; i < n;i++) {
scanf("%d",&fish[i]);
if (fish[i]) { sum += fish[i], a[i] = -; }
else a[i] = ;
}
int sum2 = ,max_sum=a[];
for (int i = ; i < n;i++) {
if(sum2>)
sum2 += a[i];
else
sum2 = a[i];
max_sum = max(max_sum, sum2);
}
printf("%d\n",max_sum+sum);
}
return ;
}

FOJ Problem 2253 Salty Fish的更多相关文章

  1. FZU 2253 salty fish

    https://vjudge.net/problem/FZU-2253 题意:略 思路: 一开始改变区间,还以为是线段树...还是dp的题做得太少了. 这题一开始我们可以统计出一共有多少只翻身的咸鱼, ...

  2. Salty Fish(区间和)

    Problem 2253 Salty Fish Accept: 35    Submit: 121Time Limit: 1000 mSec    Memory Limit : 32768 KB Pr ...

  3. B. Salty Fish Go! -期望题(瞎搞题)

    链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...

  4. 福大软工1816 · 第三次作业 - 结对项目Salty Fish原型图

    SALTY FISH原型图 LINKS IMPORT to LIST FOCUS TRENDS ANALYSE NIGHT

  5. FOJ ——Problem 1759 Super A^B mod C

     Problem 1759 Super A^B mod C Accept: 1368    Submit: 4639Time Limit: 1000 mSec    Memory Limit : 32 ...

  6. FOJ Problem 1016 无归之室

     Problem 1016 无归之室 Accept: 926    Submit: 7502Time Limit: 1000 mSec    Memory Limit : 32768 KB  Prob ...

  7. FOJ Problem 1015 土地划分

    Problem 1015 土地划分 Accept: 823    Submit: 1956Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  8. foj Problem 2107 Hua Rong Dao

    Problem 2107 Hua Rong Dao Accept: 503    Submit: 1054Time Limit: 1000 mSec    Memory Limit : 32768 K ...

  9. foj Problem 2282 Wand

     Problem 2282 Wand Accept: 432    Submit: 1537Time Limit: 1000 mSec    Memory Limit : 262144 KB Prob ...

随机推荐

  1. iframe的document操作

    导语: 在我写网页代填插件的时候,有遇到拿不到input元素的时候,这时候我去看元素布局,发现有些网站登录那一块是用iframe标签写的,这时候我需要取到的那就是iframe标签下input元素 1. ...

  2. javaweb基础(17)_jsp九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  3. Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型

    任何类都是object类的子类 用object对象接收数组 object类的向上向下转型

  4. Leetcode5078. 负二进制数相加

    问题: 5078. 负二进制数相加 给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果. 数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列. ...

  5. LeetCode之Weekly Contest 91

    第一题:柠檬水找零 问题: 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10  ...

  6. 【php】instanceof

    instanceof 的使用还有一些陷阱必须了解.在 PHP 5.1.0 之前,如果要检查的类名称不存在,instanceof 会调用__autoload().另外,如果该类没有被装载则会产生一个致命 ...

  7. 使用TensorFlow的卷积神经网络识别手写数字(1)-预处理篇

    功能: 将文件夹下的20*20像素黑白图片,根据重心位置绘制到28*28图片上,然后保存.经过预处理的图片有利于数字的准确识别.参见MNIST对图片的要求. 此处可下载已处理好的图片: https:/ ...

  8. Python9-事件及队列-day37

    信号量 from multiprocessing import Process from multiprocessing import Semaphore import time import ran ...

  9. python数据类型之字符串(str)和其常用方法

    字符串是有序的,不可变的. 下面的例子说明了字符串是不可变的 name = 'alex' name = 'Jack' """ 并没有变,只是给name开启了一块新内存,储 ...

  10. java处理excel

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...