问题描述
  题目很简单,给出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
  ……
输入格式
  输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行为 N个用空格隔开的数字(每个数字在0到9之间)。
输出格式
  输出文件仅一行包含一个整数,表示要求的最大的结果
样例输入
5 2
1 2 3 4 5
样例输出
120
样例说明
  (1+2+3)*4*5=120

题解:<-----原文链接

动态规划,依次增加乘号的数量,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)的更多相关文章

  1. 算法训练 最大的算式 DP

    算法训练 最大的算式 时间限制:1.0s   内存限制:256.0MB     问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果 ...

  2. Java实现 蓝桥杯 算法训练 最大的算式

    算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为 ...

  3. ALGO-30_蓝桥杯_算法训练_入学考试DP)

    问题描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个 ...

  4. ALGO-17_蓝桥杯_算法训练_乘积最大(DP)

    问题描述 今年是国际数学联盟确定的“——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加. ...

  5. 算法训练 数字三角形(DP)

    问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ...

  6. ALGO-9_蓝桥杯_算法训练_摆动序列(DP)

    问题描述 如果一个序列满足下面的性质,我们就将它称为摆动序列: . 序列中的所有数都是不大于k的正整数: . 序列中至少有两个数. . 序列中的数两两不相等: . 如果第i – 1个数比第i – 2个 ...

  7. ALGO-3_蓝桥杯_算法训练_K好数(DP)

    问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = ,L = 2的时候,所有K好数为11...... 共7个 ...

  8. 蓝桥杯 算法训练 ALGO-116 最大的算式

    算法训练 最大的算式   时间限制:1.0s   内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量 ...

  9. 算法训练 K好数

      算法训练 K好数   时间限制:1.0s   内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数 ...

随机推荐

  1. Python:列表中,增加元素、删除元素、切片、其它

    一.向列表中增加元素 list.append(单个元素):在list列表末端增加一个元素: list.extend([元素1,元素2]):在list列表末端增加多个元素: list.insert(元素 ...

  2. MySQL mysqldump 备份脚本(按照db.sql)

    mysqldump逻辑备份,按照db.sql文件区分,并压缩 #! /bin/bash #35 02 * * * mysql /data/mysqldata/scripts/mysqldump_per ...

  3. AllowsTransparency和WebBrowser兼容性问题解决方案

    AllowsTransparency和System.Windows.Controls.WebBrowser兼容性问题,能看这篇文章,所以原因也不用多说:最根本的就是因为MS对win32底层的WebBr ...

  4. 【转】Rails中Bootstrap的安装和使用

     转自:http://blog.csdn.net/lissdy/article/details/9195651   眼看着前端攻城师们都开始使用Bootstrap创作网页,于是也想学着在最近正在学习的 ...

  5. WINDOWS 7下的记事本程序目录

    这是win7的目录    系统所在分区:\Windows\system32\notepad.exe

  6. 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 ...

  7. SetConsoleCtrlHandler演示

    #include "stdafx.h"#include <Windows.h> static BOOL WINAPI Handler(DWORD cntrlEvent) ...

  8. Hbase优化记录

    <configuration><property><name>hbase.rootdir</name><value>hdfs://gagcl ...

  9. python的面向对象编程

    面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...

  10. JVM实用参数(一)JVM类型以及编译器模式

    JVM实用参数(一)JVM类型以及编译器模式 原文地址:https://blog.codecentric.de/en/2012/07/useful-jvm-flags-part-1-jvm-types ...