Java蓝桥杯试题集——算法训练ALGO-116——最大的算式

2023年第十四届蓝桥杯javaB组省赛真题 小蓝在玩一款种地游戏。现在他被分配给了两块大小均为 N × N 的正方形区域。这两块区域都按照 N × N 的规格进行了均等划分,划分成了若干块面积相同的小区域,其中每块小区域要么是岩石,要么就是土壤,在垂直或者水平方向上相邻的土壤可以组成一块土地。现在小蓝想要对这两块区域沿着边缘进行合并,他想知道合并以后可以得到的最大的一块土地的面积是多少(土地的面积就是土地中土壤小区域的块数)?在进行合并时,小区域之间必须对齐。可以在两块方形区域的任何一条边上进行合并,可以对两块方形区域进行 90 度、180 度、27 阅读详情

题目要求

解题思路 

动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客 写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~

首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号。将第0列赋值为前i个数的和。(没有*号,全是+号,比如第4行就是前4个数的和)

然后从第1列开始循环,*至少要在第二个数字之前出现,所以index=2。第一列应该是所有有1个*的最大值。求的方法也很简单:

dp[2][1]就是1*2,这个2就是dp[2][0] - dp[1][0]得来的。

dp[3][1]的求解循环了2遍,当 1*(2+3),和当(1+2)*3。选取结果最大的那个。

当有两个*时:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int k = in.nextInt();
		long[][] dp = new long[n + 1][k + 1]; // 第0行不用,这里使用long
		int i, j, index;
		for (i = 1; i <= n; i++) {
			dp[i][0] = dp[i - 1][0] + in.nextInt(); // 初始化第0列数组,是没有乘号的情况下的最大值(和)
		}

		for (j = 1; j <= k; j++) {    // 列数
			for (i = j + 1; i <= n; i++) {    // 行数
				for (index = 2; index <= i; index++) {    // 第几个值前面有*
					dp[i][j] = Math.max(dp[i][j], dp[index - 1][j - 1] * (dp[i][0] - dp[index - 1][0]));
				}
			}
		}
		
		System.out.println(dp[n][k]);
	 
	}
}

 

Steam崩溃:ntdll.dll报错0xc0000374...如何解决? 🏆本文收录于 《全栈 Bug 调优(实战)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。 阅读详情

相关推荐

Unity插件NodeCanvas之行为树的详细教程

NodeCanvas 是一个用于 Unity 的可视化脚本工具,主要用于游戏开发中的行为树、状态机和流程图的设计。它通过节点编辑器的方式,让开发者可以更直观地创建和管理游戏逻辑,减少了传统编码的复杂性。今天我们就来详细介绍一下NodeCanvas插件。

TxNet 1899

CSDN蓝桥杯算法题——题解Java本——跑步训练

小明要做一个跑步训练。初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0,他就停止锻炼。请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。

weixin_59272024的博客 792

服务器压力测试报告.pdf

服务器压力测试报告.pdf

算法训练 最大算式

问题描述   题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如:   N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:   1*2*(3+4+5)=24   1*(2+3)*(4+5)=45   (1*2+3)*(4+5)...

qq_36717487的博客 252

算法训练——最大算式

题目描述 题目很简单,给出 N 个数字,不改变它们的相对位置,在中间加入 K 个乘号和 N-K-1个加号,使最终结果尽量大(括号随便加)。 因为乘号和加号一共就是 N-1 个了,所以恰好每两个相邻数字之间都有一个符号。 例如:当 N = 5,K = 2,5 个数字分别为 1、2、3、4、5,可以加成: 1 * 2 * (3 + 4 + 5) = 24 1 * (2 + 3) * (4 + 5) = 45 (1 * 2 + 3) * (4 + 5) = 45 …… 输入格式 第一行为两个有空格隔开的整数,

六级不考550+不改名 317

蓝桥杯java组基础练习题50题

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?求s=a+aa+aaa+aaaa+aa...a 的值,其中a 是一个数字。例如2+22+222+2222+22222(此时共有5 个数相加),几个数相加有键盘控制。一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

s44Sc21的博客 4705

【22年蓝桥杯】十三届蓝桥杯真题JavaB组解析+代码(带你复习知识点)(一)

直接取余的话可以使用java自带的Math.pow(数,次方),或者使用BigInteger(BigInteger和int的区别就是前者范围没有限制,所以可以直接使用)。实现代码:方法一:使用BigInteger解方法二:直接使用Math.pow()

Jing_Hua 3618

java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大算式

题目要求 解题思路动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号。将第0列赋值为前i个数的和。(没有*号,全是+号,比如第4行就是前4个数的和)然后从第1列开始循环,*至少要在第二个数字之前出现,所以index=2。第一列应该是所有有1个*的最大值。求的方法也很简单:dp[...

weixin_28518991的博客 135

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-116 最大算式

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-116 最大算式 前言 最大算式 C语言 C++语言 Java语言 Python语言 总结 第六届——第十三届省赛题解 第六届——第十二届国赛题解

红目香薰 258

蓝桥杯 ALGO-116 最大算式

题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如:   N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:   1*2*(3+4+5)=24   1*(2+3)*(4+5)=45   (1*2+3)*(4+5)=45   ……

小I的博客 1022

蓝桥杯 算法训练 最大算式动态规划

问题描述   题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如:   N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:   1*2*(3+4+5)=24   1*(2+3)*(4+5)=45   (1*2+3)*(4+

叫我小雷雷就好 2692

第十届蓝桥杯Java C组真题(省赛)

1、求和(填空题)(5分) 【问题描述】 小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 2019 中,所有这样的数的和是多少? 2、矩形切割(填空题)(5分) 【问题描述】 小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。 当他面对一块矩...

沧桑058的博客 1255

基础算法题(JAVA蓝桥杯

蓝桥杯基础算法

qq_67268283的博客 1001

蓝桥杯java算法例题

本文总结了几个经典数学和字符串处理问题的解法,主要包括: 约瑟夫问题:使用队列模拟环形结构,按指定规则出列 最大公约数:采用递归的辗转相除法实现 奇妙数字:寻找平方和立方恰好包含0-9的数字 ABC问题:将三个整数按字母顺序输出 字符串压缩:将重复字符压缩为"字符+次数"格式 拼接最大数:通过自定义字符串比较排序 特定数字求和:计算包含2/0/1/9的数字之和 这些问题涵盖了队列、递归、枚举、排序等常见算法技巧,展示了如何通过合适的数据结构和算法思路解决不同类型的编程问题。

2301_80165178的博客 843

Java程序判断是否是闰年

我们知道,(1)如果是整百的年份,能被400整除的,是闰年;(2)如果不是整百的年份,能被4整除的,也是闰年。每400年,有97个闰年。鉴于此,程序可以作以下设计: 第一步,判断年份是否被400整除,能的话,就是闰年。比如1600、2000、2400年是闰年。 第二步,在第一步不成立的基础上,判断年份能否被100整除,如果是,则不是闰年。比如1900、2100、2200...

weixin_30633405的博客 414

2016 第七届 蓝桥杯 Java C组 省赛真题

一:有奖猜谜 二:煤球数目 三:平方怪圈 四:骰子游戏 五:分小组 六:凑算式 七: 搭积木 八:冰雹数 九:四平方和 十:密码脱落

程序员贺加贝的博客 1516

蓝桥杯备战笔记分享(java

java蓝桥杯笔记分享(勿喷)

YUMIAloogy的博客~ 4826

蓝桥杯 算法训练 最大算式

最大算式 问题描述   题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如:   N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:   12(3+4+5)=24   1*(2+3)(4+5)=45   (12+3)*(4+5)=45   …...

小郁同学 549

蓝桥杯最大分解

问题描述   给出一个正整数n,求一个和最大的序列a0,a1,a2,……,ap,满足n=a0>a1>a2>……>ap且ai+1是ai的约数,输出a1+a2+……+ap的最大值 输入格式   输入仅一行,包含一个正整数n 输出格式   一个正整数,表示最大的序列和,即a1+a2+……+ap的最大值 样例输入 10 样例输出 6 数据规模和约定   1<n<=10^6 样例说明   p=2   a0=10,a1=5,a2=1,6=5+1 #i

weixin_48908034的博客 1523

试题 算法训练 最大算式 Java

import java.util.Scanner; /** * 试题 算法训练 最大算式: * 题目很简单,给出N个数字,不改变它们的相对位置, * 在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。 * 因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。 * 例如: *   N=5,K=2,5个数字分别为1、2、3、4、5,可以加成: *   1*2*(3+4+5)=24 *   1*(2+3)*(4+5)=45 *   

intwei的博客 227

第十三届蓝桥杯省赛 JAVA B组(真题解析+个人体会)(已更新完G题)

试题 A: 星期计算【填空题】 题目: 答案:7 解析: 这题可以直接用double来做,考的时候我还在想会不会爆精度,后来发现答案也是对的。 此题直接对7求余即可。 public class Main { public static void main(String[] args) { double res = Math.pow(20, 22); res %= 7; System.out.println(res + 6);

奶味蓝呀的博客 2万+
上一篇: Java蓝桥杯试题集——算法训练ALGO-97——排序
下一篇: 【React进阶之路】读后总结 —— React基础
LimonSea
博客等级 码龄9年 73粉丝 104原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值