算法训练 最大的算式(DP)
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
……
1 2 3 4 5
题解:<-----原文链接
动态规划,依次增加乘号的数量,dp[i][j]表示为前i个数有j个乘号时的最大值,每次求dp[i][j]时要讨论第j个乘号的位置,假如在第k个位置,那么此时的dp[i][j]就是前k-1个数有j-1个乘号的最大值乘以第k个数到j个数的和,再和之前求出的dp[i][j]比较大小,取最大值(因为k的位置已经求得是最后一个乘号的情况,所以dp[k-1][j-1]已经表示前k-1个数j-1个乘号的最大值,直接乘以剩余的数之和即可)
即:dp[i][j] = max(dp[i][j],dp[k-1][j-1]*(sum[i]-sum[k])),根据这个依次讨论,注意乘号的数量要小于数的数量,同时要是long long int型
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; long long dp[][]; //dp[i][j]表示前i个元素j个乘号时的最大值
long long sum[]; int main()
{
int n, k;
int num; memset(dp, , sizeof(dp));
memset(sum, , sizeof(sum));
scanf("%d %d", &n, &k);
for(int i = ; i <= n; i++)
{
scanf("%d", &num);
sum[i] = sum[i-] + num;
dp[i][] = sum[i];
}
for(int i = ; i <= n; i++)
{
for(int j = ; j <= i- && j <= k; j++)
{
for(int k = ; k <= n; k++) //乘号的位置
{
dp[i][j] = max(dp[i][j], dp[k-][j-]*(sum[i]-sum[k-]));
}
}
}
printf("%lld\n", dp[n][k]);
return ;
}
只恨自己太水。
算法训练 最大的算式(DP)的更多相关文章
- 算法训练 最大的算式 DP
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果 ...
- Java实现 蓝桥杯 算法训练 最大的算式
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为 ...
- ALGO-30_蓝桥杯_算法训练_入学考试DP)
问题描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个 ...
- ALGO-17_蓝桥杯_算法训练_乘积最大(DP)
问题描述 今年是国际数学联盟确定的“——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加. ...
- 算法训练 数字三角形(DP)
问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ...
- ALGO-9_蓝桥杯_算法训练_摆动序列(DP)
问题描述 如果一个序列满足下面的性质,我们就将它称为摆动序列: . 序列中的所有数都是不大于k的正整数: . 序列中至少有两个数. . 序列中的数两两不相等: . 如果第i – 1个数比第i – 2个 ...
- ALGO-3_蓝桥杯_算法训练_K好数(DP)
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = ,L = 2的时候,所有K好数为11...... 共7个 ...
- 蓝桥杯 算法训练 ALGO-116 最大的算式
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量 ...
- 算法训练 K好数
算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数 ...
随机推荐
- Python:列表中,增加元素、删除元素、切片、其它
一.向列表中增加元素 list.append(单个元素):在list列表末端增加一个元素: list.extend([元素1,元素2]):在list列表末端增加多个元素: list.insert(元素 ...
- MySQL mysqldump 备份脚本(按照db.sql)
mysqldump逻辑备份,按照db.sql文件区分,并压缩 #! /bin/bash #35 02 * * * mysql /data/mysqldata/scripts/mysqldump_per ...
- AllowsTransparency和WebBrowser兼容性问题解决方案
AllowsTransparency和System.Windows.Controls.WebBrowser兼容性问题,能看这篇文章,所以原因也不用多说:最根本的就是因为MS对win32底层的WebBr ...
- 【转】Rails中Bootstrap的安装和使用
转自:http://blog.csdn.net/lissdy/article/details/9195651 眼看着前端攻城师们都开始使用Bootstrap创作网页,于是也想学着在最近正在学习的 ...
- WINDOWS 7下的记事本程序目录
这是win7的目录 系统所在分区:\Windows\system32\notepad.exe
- Monitoring tools that everyone's currently using
Although a lot of new tools have arrived since 2011, it's clear that older open source tools like Na ...
- SetConsoleCtrlHandler演示
#include "stdafx.h"#include <Windows.h> static BOOL WINAPI Handler(DWORD cntrlEvent) ...
- Hbase优化记录
<configuration><property><name>hbase.rootdir</name><value>hdfs://gagcl ...
- python的面向对象编程
面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...
- JVM实用参数(一)JVM类型以及编译器模式
JVM实用参数(一)JVM类型以及编译器模式 原文地址:https://blog.codecentric.de/en/2012/07/useful-jvm-flags-part-1-jvm-types ...