2021春季美团第九次笔试第三题

题目:

小美请小团吃回转寿司。转盘上有N盘寿司围成一圈,第1盘与第2盘相邻,第2盘与第3盘相邻,…,第N-1盘与第N盘相邻,第N盘与第1盘相邻。小团认为第i盘寿司的美味值为A[i](可能是负值,如果小团讨厌这盘寿司)。现在,小团要在转盘上选出连续的若干盘寿司,使得这些寿司的美味值之和最大(允许不选任何寿司,此时美味值总和为0)。

 

题目要求环形数组的连续子数组的最大和,我们先不要去管数组是环形的情况,利用动态规划求解连续子数组的最大和以及最小和。
(1) 不考虑环形得到的最大值:题中允许寿司首尾相连的环形数组情况,因此常规求得的连续子数组的最大和就是我们排除这种情况之外的所有情况中的最大和。
(2) 只考虑环形得到的最大值:而对于首尾相连的情况,我们可以这样考虑,如果常规求得的连续子数组的和达到了最小,那么总和减去这个最小值就等于首尾相连情况的最大值了。
因此最大的美味值就是(1)和(2)两种情况中大的那个。

代码:

复制代码
 1 import java.io.*;
 2 import java.io.IOException;
 3 
 4 /**
 5  * @author zcy
 6  * @date 2021年04月03日 13:09
 7  */
 8 public class Main1 {
 9     public static void main(String[] args) throws IOException{
10 
11         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
12         String str = br.readLine();
13         int t=Integer.parseInt(str);
14         while(t-->0){
15             str= br.readLine();
16             int n=Integer.parseInt(str);
17             String[] str1=br.readLine().split(" ");
18             int[] A=new int[n];
19             int i=0;
20             int sum=0;
21             for (String temp:str1){
22                 A[i]=Integer.parseInt(temp);
23                 sum+=A[i++];
24             }
25 
26             int max=0;
27             int dpmax=0;
28             int min=0;
29             int dpmin=0;
30             for(int j=1;j<n;j++){
31                 dpmax=Math.max(A[j],dpmax+A[j]);
32                 max=Math.max(dpmax,max);
33                 dpmin=Math.min(A[j],dpmin+A[j]);
34                 min=Math.min(dpmin,min);
35             }
36             System.out.println(Math.max(max,sum-min));
37         }
38 
39     }
40 }
复制代码

 

posted @   堤苏白  阅读(326)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示