Acwing.562 壁画(前缀和)

文章描述了一种策略问题,Thanh要在不断崩溃的墙上画壁画,他需要确保无论墙壁如何被摧毁,都能达到至少B的美观总分。通过计算前缀和找到最大连续和作为答案。
摘要由CSDN通过智能技术生成

题目

Thanh 想在一面被均分为 N段的墙上画一幅精美的壁画。

每段墙面都有一个美观评分,这表示它的美观程度(如果它的上面有画的话)。

不幸的是,由于洪水泛滥,墙体开始崩溃,所以他需要加快他的作画进度!

每天 Thanh 可以绘制一段墙体。

在第一天,他可以自由的选择任意一段墙面进行绘制。

在接下来的每一天,他只能选择与绘制完成的墙面相邻的墙段进行作画,因为他不想分开壁画。

在每天结束时,一段未被涂颜料的墙将被摧毁(Thanh 使用的是防水涂料,因此涂漆的部分不能被破坏),且被毁掉的墙段一定只与一段还未被毁掉的墙面相邻。

Thanh 的壁画的总体美观程度将等于他作画的所有墙段的美观评分的总和。

Thanh想要保证,无论墙壁是如何被摧毁的,他都可以达到至少 B
的美观总分。

请问他能够保证达到的美观总分 B 的最大值是多少。

输入格式

第一行包含整数 T,表示共有 T 组测试数据。

每组数据的第一行包含整数 N。

第二行包含一个长度为 N的字符串,字符串由数字 0∼9 构成,第 i个字符表示第 i段墙面被上色后能达到的美观评分。

输出格式

每组数据输出一个结果,每个结果占一行。

结果表示为 Case #x: y,其中 x为组别编号(从 1开始),y为 Thanh 可以保证达到的美观评分的最大值。

数据范围

1≤T≤100

存在一个测试点N=5∗106
其他测试点均满足2≤N≤100

  • 输入样例:
4
4
1332
4
9583
3
616
10
1029384756
  • 输出样例:
Case #1: 6
Case #2: 14
Case #3: 7
Case #4: 31

样例解释

在第一个样例中,无论墙壁如何被破坏,Thanh都可以获得 6
分的美观总分。在第一天,他可以随便选一个美观评分3的墙段进行绘画。在一天结束时,第一部分或第四部分将被摧毁,但无论哪一部分都无关紧要。在第二天,他都可以在另一段美观评分 3
的墙段上作画。

在第二个样例中,Thanh 在第一天选择最左边的美观评分为 9
的墙段上作画。在第一天结束时唯一可以被毁掉的墙体是最右边的那段墙体,因为最左边的墙壁被涂上了颜料。在第二天,他可以选择在左数第二段评分为 5
的墙面上作画。然后右数第二段墙体被摧毁。请注意,在第二天,Thanh不能选择绘制第三段墙面,因为它不与任何其他作画墙面相邻。这样可以获得 14
分的美观总分。

题解

import java.util.Scanner;

/**
 * @author akuya
 * @create 2024-03-02-18:40
 */
public class Main {
    static int T;
    static int n;
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        T=scanner.nextInt();
        int tt=T;
        while(T--!=0){
            int n=scanner.nextInt();
            String s =scanner.next();
            char c[]=s.toCharArray();
            int a[]=new int[n+1];
            for(int i=1;i<=n;i++){
                a[i]=a[i-1]+Integer.parseInt(c[i-1]+"");
            }
            int m=n+1>>1;
            int ans =0;
            for(int i=m;i<=n;i++) ans=Math.max(ans,a[i]-a[i-m]);
            System.out.print("Case #");
            System.out.print(tt-T);
            System.out.print(": ");
            System.out.println(ans);
        }
    }
}

思路

这道题用前缀和实现没有什么难度,难度是方法的证明,这里不祥述了,只说明结果,找到数组的半数(往上取整)的连续成员和,最大值为最结果,所以选用前缀和,当然滑动窗口同样可以解决。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值