Description

炸弹是塔利班对付美军的武器之一。默罕默德在塔利班的主要任务是做炸弹。默罕默德所做的新型炸弹由若干个小炸弹组成,每个小炸弹有一个威力值,整个炸弹的威力值是组成这个炸弹的最大威力差的平方,即(max-min)^2,假设一个炸弹有5个小炸弹组成,威力分别为5 9 8 2 1,那么它的威力为(9-1)^2=64。
时间紧任务多默罕默德的师傅兼老爸老默罕默德又不在,默罕默德不敢调整小炸弹的顺序,只能确定它们的分组。请你帮助默罕默德确定小炸药的分组,使制造出的炸弹拥有最大的威力和。

Input

第一行有 1 个正整数N( 1 <= N <= 1000),表示有N个小炸弹。
第二行有N个数,其中第i个数Ai表示第i个小炸弹的威力值( 0 <= Ai <= 1000)。

Output

输出炸弹的威力和。

Sample Input

6
5 9 8 2 1 6

Sample Output

77

Source

思路:

把n个炸弹分为任意组,前提是炸弹顺序不能变,例如炸弹为1,2,3,4

那么可以分为{1},{2,3},{4}

或者{1,2},{3},{4}

说白话就是分为若干个连续的子序列

首先v2动态规划八字金句(看分析图,图中的某些部分看不懂我下面会一一解释)

第一

假设有这样一个大小为n的炸弹数组

index 0 1 2 ..... i .... n-1
val 5 4 6 ..... 1 .... 3

当我们选择到第i个下标的炸弹时(后面的统统不考虑):

我们可以考虑有哪些情况?

第i个炸弹可以与前面若干个炸弹组合成一个连续的炸弹组

例如{i-2,i-1,i}这三个炸弹组成一个炸弹组

那么就有i+1种情况:

{i-1,i}

{i-2,i-1,i}

{i-3,i-2,i-1,i}

....

{0,1,2,....,i-2,i-1,i}


第二

看懂了上面的解释

我们就可以定义一下通项了,设dp[i]为【0-i】范围内组成炸弹威力最大的值

 起调也出来了,我们要求的最终结果就是dp[n-1],表示【0-n-1】范围内组成炸弹威力的最大值


第三

继续第一步的分析,我们选择到第i个炸弹

有i+1种可能的情况,我们是否可以枚举每一种情况,然后取最大值,这个值是不是就是dp[i]的值,即【0-i】范围内组成炸弹威力的最大值

那么我们用一个变量j来辅助枚举

转移方程伪代码:

for( j 范围 [0,i] )

{

dp[i]=max(dp[i],  dp[j-1]+pre[j][i]);

}

dp[j-1]表示0-j-1范围内组成炸弹的最大值,pre[j][i]表示j-i范围内组成炸弹的威力值

pre[i][j]数组需要我们提前预处理,表示的就是从下标i到下表j区间内炸弹的威力值


第四

到此为止

通项:dp[i]

出口:dp[0]=0

起调:dp[n-1]

转移:

dp[i]=max(dp[i],dp[j-1]+pre[j][i])

代码:

#include<iostream>
#include<vector>using namespace std;
int a[1005];int main()
{//输入int n;scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &a[i]);vector<vector<int> > pre(n, vector<int>(n, 0));//pre预处理数组 下标表示从i到j区间内炸弹威力值//例如i=1,j=1表示下标为1的炸弹单独成组的炸弹威力值为0for (int i = 0; i < n; i++){int max_v = a[i];int min_v = a[i];for (int j = i; j < n; j++){if (a[j] > max_v)max_v = a[j];if (a[j] < min_v)min_v = a[j];pre[i][j] = (max_v - min_v) * (max_v - min_v);}}//pre表格输出/*for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){printf("%d ", pre[i][j]);}printf("\n");}*/vector<int> dp(n + 1, 0);dp[0] = 0;for (int i = 1; i < n; i++){for (int j = 0; j <= i; j++){//注意j的取值,当j=0时,j-1=-1会数组越界,手动判断一下if (j == 0)dp[i] = max(dp[i], 0 + pre[j][i]);elsedp[i]= max(dp[i], dp[j-1] + pre[j][i]);}}printf("%d\n", dp[n - 1]);return 0;
}

如果还不清楚的话可以私信我

XMUTOJ-默罕默德的炸弹相关推荐

  1. 厦门理工学院 oj-1184 默罕默德的炸弹

    默罕默德的炸弹 Time Limit:1000MS Memory Limit:65536K Total Submit:282 Accepted:112 Description 炸弹是塔利班对付美军的武 ...

  2. 裁员这件事,谁也没有鲍尔默、纳德拉这两届微软CEO演绎的淋漓尽致

    滴滴.Uber达成战略协议,经过昨日的酝酿依然热度不减,今天继续霸占科技媒体的首页.不过,就在昨晚将近凌晨的时候,Uber中国的800多名员工,收到"合并完成现金奖励"的邮件,内容 ...

  3. 何以箫声默,默声箫以何?

    听人说,金鱼的记忆只有七秒. 而等一个不回来的人,直至彻底死心,需要七年,乃至更久. 2003 年,一本<何以笙箫默>红遍了大江南北.说来也巧,我是第一批读者,追着作者的脚步,看故事里蠢萌 ...

  4. 鲍尔默炮轰纳德拉提出的通用Windows平台战略

    赛迪网讯 尽管Windows 10似乎已经取得一定的成绩,但是不管在计算机.平板电脑还是智能手机上面,Windows Store应用市场都拖了Windows 10的后腿. Windows Store应 ...

  5. 离开时请告诉自己生意就是生意

    离开时请告诉自己生意就是生意 离职或者被离职,是职场中很常见的事情,每天这个星球上不知道要发生多少次,不管你经历过与否.体会到其中的滋味与否,他都会一直存在着!当这一切发生时,不管你是获利者还是受害者 ...

  6. Android、Java要收费了!学霸程序员怒捅马蜂窝,沙特记者命运?GitHub挂了!

    Linux编程点击右侧关注,免费入门到精通! 参考:新浪,新浪科技,网络等 头条热点 学霸程序员怒捅马蜂窝,175亿独角兽因此缩水至20亿! 10月21日,一篇名为<估值 175 亿的旅游独角兽 ...

  7. 「巫师3(The Witcher 3:Wild Hunt)」游戏个人测评

    <巫师3:狂猎(The Witcher 3: Wild Hunt)>是由CD Projekt RED制作,WB Games(NA).Spike Chunsoft(JP)发行的一款由同名小说 ...

  8. 2005年度最佳照片----幅幅经典

    沙暴:4月26日,伊拉克与叙利亚和约旦的交界处,一起沙暴咆哮着穿过阿萨德沙漠.气象专家说这种延伸4000到5000英尺的沙暴十分罕见 走在严寒中:2月7日,伊朗首都德黑兰的Azadi广场,一位妇女走在 ...

  9. 关于app提示专为旧版Android打造的有关测试

    因为经常进自己网站左康右康有没有人访问(极度自恋),老是去翻浏览器书签很麻烦,最近就想着把网站打包一个app,虽然我这破站也没什么可看的,不过至少打包后加点快捷功能就看不出来我一直在划水了 查看全文 ...

最新文章

  1. python多进程原理_python多进程的详细介绍(附示例)
  2. php里面没有mssql,为什么没有正确使用PHP / MSSQL的日期/时间?
  3. 华为服务器装系统怎么选pxe,华为TaiShan服务器PXE操作系统
  4. 系统管理员设置了系统策略 禁止进行此安装的修改办法
  5. JSP开发工具安装教程
  6. 4款最好的Android设备HTML编辑器
  7. 详解开关量,模拟量,数字量区别
  8. 3D检测入门知识梳理
  9. 网页中图片显示不出来,解决网页中图片不能显示的方法
  10. C++使用模板重载vector的加减法实现矩阵向量加减法
  11. 二等水准数据平差_二等水准测量方法与步骤
  12. 进不了BIOS,电脑开机黑屏
  13. 想给公司起个大气点的名字,大家帮忙啊!!!
  14. 关于chrome浏览器不能正常访问百度的解决方法
  15. 人脸识别原理:(初级篇)内含PPT
  16. php slug,php 中的var
  17. Java 读书笔记1
  18. 21世纪世界国土面积排名
  19. Mono及MonoDevelop介绍与安装
  20. 【C#】制作简单的飞行棋小游戏

热门文章

  1. 三种CRC16 C语言算法理解(CCITT)
  2. crc16的c语言函数 计算ccitt_求一个C语言实现的CRC16/CCITT-FALSE校验码函数
  3. hdwiki上传附件不显示bug解决办法
  4. java计算机毕业设计重庆旅游景点源码+数据库+系统+lw文档
  5. 使用云服务器上线网站流程
  6. word文件的样式如何修改?
  7. 如何简单粗暴解决echars大数据量渲染卡顿问题
  8. SN/CF 5W-40含义
  9. Linux怎么彻底删除用户
  10. 递归查询数据库中树状数据