/*
动态规划题的思路:设定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<=d经计算ab,cd配对方案的累计疲劳度<=ac,bd配对方案的累计疲劳度。结论:每一对组合的两个物品重量,是原物品中重量相邻的两个物品。
先对物品排序。设dp[i][j]表示前j件物品中选择i对物品的最小疲劳度。状态来源:
1)物品j和j-1未配对,则物品j