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. Twisted 综述

    Twisted 框架概况 Twisted 是一个有着10多年历史的开源事件驱动框架.Twisted 支持很多协议,包括传输层的TCP.UDP.TLS,以及应用层的HTTP.FTP等.对所有这些协议,T ...

  2. javaweb基础(22)_Servlet+JSP+JavaBean实战登陆

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  3. runtime比较全面的总结

    类和对象 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者 ...

  4. Windows10 关闭自动更新

    win+R调出运行窗口: 输入services.msc,查找 跳出服务窗口,点击windows update设置禁用即可 Windows Update Medic Service没办法禁用,需要采用其 ...

  5. 10GNU C语言函数调用

    6. C 函数调用机制概述 ​ 在 Linux 内核程序 boot/head.s 执行完基本初始化操作之后,就会跳转区执行 init/main.c 程序.那么 head.s 程序时如何把执行控制转交给 ...

  6. 【android】android对位图文件的支持

    Android 支持以下三种格式的位图文件:.png(首选)..jpg(可接受)..gif(不建议).

  7. Python3 pymsyql 连接读取数据

    import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='t ...

  8. 15.Yii2.0框架where单表查询

    目录 新建控制器 HomeController.php 新建model article.php 新建控制器 HomeController.php D:\xampp\htdocs\yii\control ...

  9. IAR调试时出现IAR one or more breakpoints could not be set and have been disabled的解决办法

    问题:在IAR调试时,单步执行的时候绿色箭头一直指向汇编界面,不指向C语言界面,并且不能在C语言界面设置断点,以及在代码编辑界面,设置断点,点调试时总提示IAR one or more breakpo ...

  10. 使用MeidaStore.Audio获得手机中的音频文件

    MediaStore是安卓系统自带的多媒体系统数据库,他在每次开机时刷新一次,可以通过Cursor这个类对数据库进行访问与修改,修改之后需用广播强制刷新. 使用Cursor必须通过Context获得C ...