HDU 1421
来源:互联网 发布:python多进程和多线程 编辑:程序博客网 时间:2024/05/29 19:05
dp[i][j] = min(dp[i - 2][j - 1] + (v[i] - v[i - 1]) * (v[i] - v[i - 1]), dp[i - 1][j]);
事先对物品重量v进行排序,则只有相邻两件物品之差最小。
对于dp[i][j]其中i表示物品n,j表示搬运次数k,结果为dp[n][k]。
策略有两种,一种为选取当前第i件物品,那么得到公式dp[i - 2][j - 1] + (v[i] - v[i - 1]),一种为不选当前i物品,则dp[i -1][j]。
代码:
#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>using namespace std;const int MAX_NUM = 0x7fffffff;int dp[2005][1005];int main(){ int n, k, v[2005]; while (~scanf("%d%d", &n, &k)){ memset(v, 0, sizeof(v)); for (int i = 1; i <= n; i++) scanf("%d", &v[i]); sort(v + 1, v + n + 1); for (int i = 0; i <= n; i++) for (int j = 0; j <= k; j++) dp[i][j] = MAX_NUM; for (int i = 0; i <= n; i++) dp[i][0] = 0; for (int i = 2; i <= n; i++) for (int j = 1; j * 2 <= i; j++) dp[i][j] = min(dp[i - 2][j - 1] + (v[i] - v[i - 1]) * (v[i] - v[i - 1]), dp[i - 1][j]); printf("%d\n", dp[n][k]); } return 0;}
0 0
- hdu 1421
- HDU 1421
- hdu 1421
- hdu 1421
- hdu 1421
- HDU-1421
- HDU 1421
- HDU 1421
- HDU 1421
- hdu 1421
- hdu 1421
- HDU 1421
- hdu 1421
- hdu 1421
- HDU 1421
- HDU-1421
- HDU 1421
- 排位赛dp总结(HDU 2955,HDU 1864,HDU 1421)
- 最长回文串前缀
- 移动端touch事件 之 百度 touch.js 开发文档
- 进制转换变形题 poj 1331 Multiply
- hdu5875思维题
- HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
- HDU 1421
- [Android开发]-图片压缩(根据屏幕大小进行比例压缩)
- * daemon not running.starting it now on port 5037 * 问题解决
- 事件委托的二级菜单编写
- Generic Makefile for C program
- 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest G:Graph (构造,拓扑)
- CMS 垃圾回收
- css选择器
- C#控制台基础 dictionary 与hashtable的区别