8597 石子划分问题 dpdp,只考虑第一次即可
8597 石子划分问题
时间限制:500MS 内存限制:1000K
提交次数:155 通过次数:53
题型: 编程题 语言: G++;GCC;VC
Description
给定n个石子,其重量分别为a1,a2,a3,...,an。 要求将其划分为m份,每一份的划分费用定义为这份石子中最大重量与最小重量差的平方。 总划分费用为m份划分费用之和。现在对于给定的n个石子,求一种划分方案,使得总划分费用最小。
输入格式
第一行两个正整数n和m,接下来一行有n个正整数,表示一个石子的重量ai。(1≤n, m, ai≤1000)
输出格式
计算输出最小总划分费用。注意:若一份只有一个石子,那么,这份石子中最大重量与最小重量的差的平方为0。
输入样例
4 2 4 7 10 1
输出样例
18
提示
1,先将石子重量从小到大排序(从大到小也可以). 2,假设f(n,m)表示:n个石头分成m份的最小费用. 特别的,有f(1,1)=0; f(n,1)=(an - a1)^2 那么,除去最后一份石头的若干个,前面m-1份必定也是最优的分法. 若最后一堆1个石头, f(n,m) = f(n-1,m-1)+0^2 若最后一堆2个石头, f(n,m) = f(n-2,m-1)+(an - an-1)^2 若最后一堆3个石头, f(n,m) = f(n-3,m-1)+(an - an-2)^2 ...... 最后一堆最多只能有n-m+1个石头,因为当最后一堆为n-m+1时,前面m-1堆已经是一个一份了. 因此, f(n,m) = Min{ f(n-1,m-1)+0^2, f(n-2,m-1)+(an - an-1)^2, ...}例如: n=5, m=2 a[1..5] = 1 3 4 8 9 f(5,2)=Min{ f(4,1)+0; f(3,1)+1; f(2,1)+5^2 }=Min{49,10,29}=10 这5个石头分2堆的最优分法:(1 3 4)(8 9)
这题需要记录,做的时候居然又忘记了。
首先贪心,排序后,相邻的排在一堆是必然的。
然后每次只考虑最后一堆即可是吧,其他的递归处理。
所以,设dp[i][j]表示前i个数字,分成j堆的最小值。
那么,考虑最后一堆,肯定是min(dp[1...i-1][j-1] + pow(a[n] - a[n - i + 1], 2));
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #define IOS ios::sync_with_stdio(false) using namespace std; #define inf (0x3f3f3f3f) typedef long long int LL;#include <iostream> #include <sstream> const int maxn = 1e3 + 20; int dp[maxn][maxn]; int a[maxn]; int dfs(int n, int m) {if (m == 1) return (a[n] - a[1]) * (a[n] - a[1]);if (n == m) return 0;if (dp[n][m]) return dp[n][m];int ans = 1e9;for (int i = 1; i <= n - m + 1; ++i) {ans = min(ans, dfs(n - i, m - 1) + (a[n] - a[n - i + 1]) * (a[n] - a[n - i + 1]));}return dp[n][m] = ans; }void work() {int n, m;cin >> n >> m;for (int i = 1; i <= n; ++i) cin >> a[i];sort(a + 1, a + 1 + n);cout << dfs(n, m) << endl; }int main() { #ifdef localfreopen("data.txt", "r", stdin); // freopen("data.txt", "w", stdout); #endifwork();return 0; }
View Code
作者
zhengchan
转载于:https://www.cnblogs.com/liuweimingcprogram/p/8262163.html
8597 石子划分问题 dpdp,只考虑第一次即可相关推荐
- R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)、查看限制了规则的右侧之后挖掘到的规则(置信度排序,只查看左侧即可)
R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘).查看限制了规则的右侧之后挖掘到的规则(置信度排序,只查看左侧即可) 目录
- 防抖函数:多次触发后只执行第一次或者最后一次的函数
一. 应用场景 当前问题: 现在点击一个按钮,然后会向服务器请求一次数据.如果暴力操作,不断的点击按钮,那么就会一直向服务器请求,这样肯定不好,需要应用到防抖函数. 最终目的:多次触发只执行最后一次或 ...
- 【Android 小功能】启动 App 时实现启动页、引导页功能,并且只在第一次启动 App 时跳入引导页面
[Android]如何实现启动APP时引导页.欢迎页功能之(一)引导页功能的实现 [Android]如何实现启动APP时引导页.欢迎页功能设置之(二)设置只在第一次启动APP时跳入引导界面
- 读取一组电话号码簿(由姓名和手机号码组成),将重复出现的项删除(姓名和电话号码都相同的项为重复项,只保留第一次出现的项),并对姓名相同手机号码不同的项进行如下整理。
读取一组电话号码簿(由姓名和手机号码组成),将重复出现的项删除(姓名和电话号码都相同的项为重复项,只保留第一次出现的项),并对姓名相同手机号码不同的项进行如下整理:首次出现的项不作处理,第一次重复的姓 ...
- 每天一道LeetCode-----重新实现开方运算sqrt(x),只返回整数部分即可
Sqrt(x) 原题链接Sqrt(x) 重新实现开方运算. 因为要求实现的开方运算只需要返回整数部分即可,所以首先考虑一下当n为多少时可以返回. n是给定x的开方结果一定满足 n * n <= ...
- 股票分析,利用线性回归实时预测股价,只需要提供股票代码即可爬取相应股票数据并建模
这里参考了别人的代码,并引用了tushare模块中定义的接口自动获取了依据 股票代码来获取数据 此篇文章提供了 1.一个简单通过接口爬取csv数据的方法 2.一个处理csv数据的简单方法 3.依据数据 ...
- filter wiz_Grid Wiz简介:只需一瞬间即可制作出具有自定义浏览器支持CSS网格框架。
filter wiz Today, I am thrilled to share with you a new, flexible grid framework generator: Grid Wiz ...
- 嵌套点击事件只执行第一次
如下点击"哈哈哈"的时候只触发f2也就是弹出2,不弹出1 <a onclick='f1()'><div><span onclick="f2( ...
- 牛逼了,这21款游戏项目,只一行代码即可上手—开玩【附源码】
导语 随着时代的不同 社会的改变 伴随着一起长大的游戏 逐渐淡出我们的视线 却一直铭刻在我们心中 还记得你小时候都玩过什么游戏吗?超级玛丽--坦克大战--魂斗罗--贪吃蛇--植物大战僵尸..... ...
最新文章
- 网络安全 — 安全架构
- 关于RPM包中的rpmnew和rpmsave
- 【C++ 语言】引用数据类型 ( 引用数据类型定义 | 引用数据类型使用 | 引用类型参数 )
- bootstrap table排序php,bootstraptable排序可以么
- 韩顺平php视频笔记77 抽象类vs接口 关键字final const
- pin码是什么意思?
- Report Machine 在WIN7系统下 IE里面运行错误
- 关于PC电脑微信进粉计数器的选择?
- 02333软件工程_202008_试卷+答案
- c语言库函数总结----ctype.h库
- 用《圣经》做训练数据集,达特茅斯学院完美打造语言风格转换工具
- 南航里程每年清空吗_南航里程即将大幅贬值!此期限前使用仍能保值
- Kindle接入HomeAssistant:实现锁屏壁纸显示HA内设备信息并在HA内获取Kindle电量
- web术语chm_笨客户端的20个Web设计行业术语
- WRF气象数据之NECP FNL数据批量下载
- Echarts绘制地图,且可以下钻到省区
- Python一行代码搞定炫酷可视化,Cufflinks值得拥有 !
- CVPR 2022 最新106篇论文分方向整理|包含目标检测、动作识别、图像处理等32个方向
- 干货 | NLP算法岗大厂面试经验与路线图分享
- 视频教程-快速入门Android开发 视频 教程 android studio-Android
热门文章
- 假定某一个数据列表是一个班级的计算机课程,若需要利用形参直接访问实参,则应把形参变量说明为()参数。A.指针B.引用C.传值D.常值...
- 冯珊珊_模拟器企业衡泰信签约冯珊珊,推动高尔夫运动下沉
- mysql数据库连接时区设置_springboot 连接数据库之时区设置
- android中的add方法,Android入门之addWindow
- python科学计算与图形渲染_宁哥Python科学计算与图形渲染库课程
- PL/SQL Developer跑在Oracle 64位数据库上初始化错误
- 160 - 35 cupofcoffe.1
- icse ccf_ICSE的完整形式是什么?
- Java MathContext类| hashCode()方法与示例
- 合页损失,铰链损失_多点铰链损失功能 使用Python的线性代数