机试算法讲解: 第52题 动态规划之搬寝室问题

该博客探讨了如何使用动态规划解决搬寝室问题,其中涉及到物品重量排序和配对策略,以达到最低疲劳度。通过对物品重量的快速排序和状态转移方程的建立,实现了动态规划算法,以O(k*n)的时间复杂度求解问题。
摘要由CSDN通过智能技术生成
/*
动态规划题的思路:设定dp[i],dp[i][j]等数字量进行求解,这个数字量就称为:状态。
                状态:含义:是秒数当前状况的一个数字量。
				      特点:是数字,保存在内存中,可以表示一个状态的特征,不需要辅助信息。最重要:状态间的转移依赖于状态本身。
					  dp(dynamic plan,动态规划)
				关键:寻找一个好的状态
				状态转移:由一个或多个旧的状态得到一个新的状态的过程。例如:通过dp[i-1][j-1]推出dp[i][j]。
				转移规则(状态转移方程):数字量之间的递推关系。
				确定状态的转移规则:即确定怎样由前序状态递推求出后续状态。
				dp问题的复杂度估计:两个字符串的长度分别为L1和L2,共有L1*L2个状态要求解,为求解每个状态,按照相应字符是否相等选取dp[i-1][j-1]+1或者max{
				dp[i-1][j],dp[i][j-1]}为dp[i][j]的值,即每个状态的得出需要O(1)的时间,所以总的时间复杂度为O(L1*L2*1)
				对于最长递增子序列:原数列长度为n,则状态数量为dp[n],状态转移过程中每个状态得出的复杂度为O(n),总时间复杂度为O(n*n)

				dp时间复杂度=状态数量*状态转移复杂度

问题:搬寝室。n件物品,n<2000.准备搬2*k(<=n)件物品。每搬一次的疲劳度和左右手之间的重量差的平方成正比。请求出办完这2*k件物品后的最低疲劳度是多少
输入:每组输入数据有2行,第一行有2个数n,k(2<=2*k<=n<2000),第二行有n个整数,分别表示n件物品的重量(<2的15次方)
输出:对应每组输入数据,输出数据只有一个表示他的最少的疲劳度,每个一行.
输入:
2 1
1 3
输出: 
4

思路:设a<=b<=c<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值