默罕默德的炸弹

Time Limit:1000MS Memory Limit:65536K
Total Submit:282 Accepted:112

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遍后,终于猜到了题目的意思。。

--------------------题目大意为:-------------------------
给N个炸弹,可以将这N个小炸弹分成若干组,每组合成一个大炸弹

大炸弹的威力 = (小炸弹中威力最大 - 小炸弹中威力最小)²

拿题目给的数据举例:
5 9 8 2 1 6
分为2组:{5,9}、{8,2,1,6} 等
分为3组:{5}、{9,8}、{2,1,6} 等
分为4组: …
分为5组: …
分为6组: …

----------------------------------需要注意:------------------------
1、小炸弹的顺序不能改变。
2、每组的个数可以不同。

----------------------------解这题用动态规划:----------------

输入数据,嗯!大家都会的吧!

代码中循环从下标1,开始,方便解题

cin >> N;for(int i=1;i<=N;i++){cin >> A[i];}

--------------------------------计算 p[i][j] ----------------------

p[i][j] : 第 i 个炸弹到第 j 个炸弹 为一组 的最大威力值

//----------------计算p[i][j]------------------for(int i=1;i<=N;i++){int maxn = A[i];int minn = A[i];for(int j=i;j<=N;j++){if(A[j] > maxn) maxn = A[j];if(A[j] < minn) minn = A[j];p[i][j] = (maxn-minn)*(maxn-minn);//p[i][j]表示i到j的最大威力}}

-----------------------------------计算dp[i][j]--------------------------
dp[i][j]:i个炸弹分为j组的最大威力值
1、若 i <= j 则最大威力值为0。
2、将 i 个炸弹分为1组,最大威力值就等于 p[ 1 ][ i ] (第1个炸弹到第 i 个炸弹 的最大威力)。

// i个炸弹分为1组for(int i=1;i<=N;i++){dp[i][1]=p[1][i];}

分析到这里,按题目给的数据 :5 9 8 2 1 6

-----------------------------就可以填出下表-----------------------
图中红色三角形为还需要填的部分。

如图分析后,可以很容易 的写出转移方程,可以很容易 的写出代码把表填完整

//-------------------转移-----------------for(int i=3;i<=N;i++)//第3行到第N行{for(int j=2;j<=i-1;j++)//第2列到第i-1列{for(int k=j-1;k<i;k++)//前k个分为j-1组,后i-k个分为1组{//取最大威力值的分组,赋值给dp[i][j]if(dp[k][j-1]+p[k+1][i] > dp[i][j]){dp[i][j] = dp[k][j-1]+p[k+1][i];}}}}

-------------------------------填完表的结果就是酱紫--------------------

这张 dp[i][j] 表的表填完也就意味着问题已经解决。

答案就是最后一行中最大的那个数字 dp[6][3] = 77。

厦门理工学院 oj-1184 默罕默德的炸弹相关推荐

  1. 厦门理工学院oj 1107-牲口棚的安全

    厦门理工学院oj 1107-牲口棚的安全 题目描述: Time Limit:1000MS Memory Limit:65536K Total Submit:211 Accepted:122 Descr ...

  2. 厦门理工学院OJ题解(合集)

    把一些好玩的题目的题解放这里.有什么其他好玩题想看的评论或私信,我再写. 厦门理工学院OJ题解(1020:第三届程序设计大赛 搬果实) 厦门理工学院OJ题解(1139:秦心的面具) 厦门理工学院OJ题 ...

  3. 厦门理工学院OJ 1108.雾霾大作战 (最短路)

    Description 京津冀地区常发生雾霾,厦门人普遍感受不深.如今厦门有时也会发生雾霾,厦门市政府决定推行公共自行车来解决雾霾问题. 政府决定在厦禾路上设置了N 个自行车出租站1,2,-,N.市民 ...

  4. 厦门理工学院OJ题解(1139:秦心的面具)

    秦心由面具所转化而成的付丧神.因为本体总是木无表情,看上去就像一个三无少女.持有66个代表不同情绪的面具,通过这些面具可以表达出不同的感情.拥有操控感情程度的能力.秦心无意之中丢失了代表"希 ...

  5. 厦门理工学院OJ 1187.骑士精神 (dfs+剪枝)

    Description 像骑士的忠贞 不畏惧邪恶的眼神 这过程一直放在我心底就像 挡在你胸前的盔甲 保护着我让我心疼 骑士们发挥出你们的精神 就这样强悍的骑士撑到最后 骄傲的公主的要回家整装再出发. ...

  6. 厦门理工学院OJ题解(1226:英雄联盟)

    Description 相信很多人都玩过英雄联盟,身为一个优秀的召唤师,你需要能很好地补兵.假设你使用的是无极剑圣, 你只能对小兵使用普通攻击和阿尔法突袭,施放普通攻击和阿尔法突袭的时间都为 1 秒, ...

  7. 厦门理工学院OJ 1234.恐怖的奴隶主 (模拟)

    __M子__最近在玩一款叫做<炉石传说>的卡牌游戏,最经常使用的是以恐怖奴隶主为核心的战士套牌,该套牌经典打法有以下3种: 1.用恐怖奴隶主+旋风斩效果,铺场. 2.用战歌指挥官+恐怖奴隶 ...

  8. 厦门理工学院OJ 1139.秦心的面具 (bfs)

    Description 秦心由面具所转化而成的付丧神.因为本体总是木无表情,看上去就像一个三无少女.持有66个代表不同情绪的面具,通过这些面具可以表达出不同的感情.拥有操控感情程度的能力.秦心无意之中 ...

  9. XMUTOJ-默罕默德的炸弹

    Description 炸弹是塔利班对付美军的武器之一.默罕默德在塔利班的主要任务是做炸弹.默罕默德所做的新型炸弹由若干个小炸弹组成,每个小炸弹有一个威力值,整个炸弹的威力值是组成这个炸弹的最大威力差 ...

最新文章

  1. knn的python代码_Python代码实现KNN算法
  2. ASP.NET MVC 线程和并发
  3. Visual Studio常用的快捷键整理
  4. 计算机中丢失ENWeb,webapi session 丢失
  5. Linux命令之awk:高级输入输出(四)
  6. 【我的相册】北方的传统面艺
  7. SQL Server datetime数据类型设计与优化误区
  8. innerdb disable error
  9. GBK编码和UTF-8编码区别各所占用字节数
  10. cad快捷栏怎么调出来_cad工具栏怎么调出来
  11. 计算机函数公式 加法,excel怎样使用加法函数公式
  12. 音乐资源免费_3个免费的音乐研究在线资源
  13. 显示一个立方体的斜二测图(用数组存放正方体的各顶点坐标)
  14. EasyUI的Vue版本
  15. 串口收 程序FPGA
  16. Prometheus+Grafana环境搭建(windows版)
  17. 全国首款二级分销小程序上线
  18. 2021年美容师(初级)最新解析及美容师(初级)模拟考试题
  19. 微信小程序--点击水波涟漪效果
  20. 服务器常用的操作系统

热门文章

  1. oracle参数配置oci,Linux下OCI环境配置
  2. 解决 wsl Cannot Connect to X display 和 Message bochs cannot connect to X server localhost0.0
  3. cocos creator 加速器实现
  4. c语言程序设计的水电费问题,C语言程序设计A综合程序设计.pptx
  5. 大数据框架介绍与实操
  6. 反证法逻辑原理学习记录
  7. Metabase学习教程:提问-3
  8. 使用库函数sqrt求平方根 C语言入门
  9. 微信小程序this.setData()
  10. Unity3d入门—模拟刚体碰撞