算法笔记_083:蓝桥杯练习 合并石子(Java)
目录
1 问题描述
接下来一行,包含n个整数,按顺序给出每堆石子的大小 。
1 2 3 4 5
2 解决方案
本题主要考查动态规划法思想。
刚开始做的时候,使用贪心法求解,即每次选择相邻两个和为最小的一组合成堆,结果评分为10分,后来仔细想了一下,贪心法不能达到最优解,唯有使用动态规划法求解。
该题几乎和训练题集中的矩阵相乘一样,具体思想讲解,请参考本人另一篇博客:算法笔记_081:蓝桥杯练习 算法提高 矩阵乘法(Java)
具体代码如下:
import java.util.Scanner; public class Main { public long getSum(long[] A, int a, int b) {
long sum = 0;
for(int i = a;i <= b;i++)
sum += A[i];
return sum;
} public void printResult(long[] A) {
if(A.length == 1) {
System.out.println(A[0]);
return;
}
long[][] dp = new long[A.length + 1][A.length + 1];
for(int len = 2;len <= A.length;len++) {
for(int i = 1, j = len;j <= A.length;i++,j++) {
long min = Long.MAX_VALUE;
for(int k = i;k < j;k++) {
if(min > dp[i][k] + dp[k + 1][j] + getSum(A, i - 1, j - 1))
min = dp[i][k] + dp[k + 1][j] + getSum(A, i - 1, j - 1);
}
dp[i][j] = min;
}
}
System.out.println(dp[1][A.length]);
return;
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
if(n < 1 || n > 1000)
return;
long[] A = new long[n];
for(int i = 0;i < n;i++) {
A[i] = in.nextLong();
}
test.printResult(A);
}
}
算法笔记_083:蓝桥杯练习 合并石子(Java)的更多相关文章
- 算法笔记_052:蓝桥杯练习Multithreading(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 现有如下一个算法: repeat ni times yi := y y := yi+1 end repeat 令n[1]为你需要算加法的第 ...
- 算法笔记_067:蓝桥杯练习 算法训练 安慰奶牛(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是 ...
- 算法笔记_107:蓝桥杯练习 算法提高 学霸的迷宫(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要 ...
- 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负 ...
- 算法笔记_091:蓝桥杯练习 递推求值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n- ...
- 算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 递推法 1 问题描述 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰 ...
- 算法笔记_055:蓝桥杯练习 Tricky and Clever Password (Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 在年轻的时候,我们故事中的英雄——国王 Copa——他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好 ...
- 算法笔记_076:蓝桥杯练习 结点选择(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多 ...
- 算法笔记_060:蓝桥杯练习 出现次数最多的整数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统 ...
随机推荐
- eclipse汉化 adt汉化
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha
- BZOJ 1260 [CQOI2007]涂色paint(区间DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1260 [题目大意] 假设你有一条长度为n的木版,初始时没有涂过任何颜色 每次你可以把一 ...
- [CODECHEF]TREECNT2
题意:一棵带边权的树,边权可单边修改,问初始时和每次修改后有多少条路径$\gcd=1$ 首先考虑用反演求答案,设$f(n)$为路径$\gcd=n$的路径条数,$g(n)$为路径$\gcd$是$n$倍数 ...
- 【推导】【数学期望】Gym - 101237D - Short Enough Task
按照回文子串的奇偶分类讨论,分别计算其对答案的贡献,然后奇偶分别进行求和. 推导出来,化简一下……发现奇数也好,偶数也好,都可以拆成一个等比数列求和,以及一个可以错位相减的数列求和. 然后用高中数学知 ...
- 创建Django与项目介绍
主流web框架总结 a socket b 路由关系 c 模板字符串替换(模板语言) 主流web框架 djange a用别人的 b自己写 c自己写 flask a用别人的 b自己写 c用别人的(jinj ...
- 一个简单的Spring程序
首先,要用Eclipse开发Spring程序,需要安装Spring插件并重启Eclipse 具体操作: 新建java Project后,导入需要使用的包(提前下好Spring),Spring包包含6个 ...
- openstack-cinder-netapp
https://communities.netapp.com/docs/DOC-31749 http://docs.openstack.org/havana/config-reference/cont ...
- (转)探索C++的秘密之详解extern "C",这就是为什么很多.lib被我们正确调用确总是无法解析的。
(转载,绝对的有用) lib被我们正确调用确总是无法解析.这是C++编译和C编译的区别 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C&qu ...
- 【POI】解析xls报错:java.util.zip.ZipException: error in opening zip file
今天使用POI解析XLS,报错如下: Servlet.service() for servlet [rest] in context with path [/cetBrand] threw excep ...
- Linq 时间参数的一个坑
背景:查询某个字段大于系统时间的数据 两种写法: 1.DataTime now=DateTime.Now; var result=dbContext.Table1.Created>now 2. ...