摘要: 题目大意:从n根筷子当中选取j对,其中一对筷子包含三根,并且要求第三跟不短语前两根。要求取出的筷子长度差(前两根的长度差)的平方的和最小。
num[i] 表示第i+1个筷子与第i个筷子长度差的平方~
开始从前面往后推,漏洞百出:dp[i][j]表示从1……i个筷子中选取j对,
dp[i][j] = MIN(dp[i-1][j],dp[i-3][j-1] + num[i-2]);
问题在哪? 第i个筷子能用,
一种情况:第i-1个筷子能与第i-2个筷子配对了(来了第三根筷子i);
二种情况:影响1……i-1个筷子中取j对筷子的配对情况。WHY?think about~
最后从后往前推:dp[i][j]表示从i……n个筷子中选取j对,
dp[i][j] = MIN(dp[i+1][j],dp[i+2][j-1] + num[i]);
没问题了吧~ 第i个筷子取,则必与第i+1个筷子配对,不取则可以忽略它(就因为它是当前最短的)
阅读全文