hdu1421
来源:互联网 发布:cms管理系统模板 编辑:程序博客网 时间:2024/05/16 08:43
状态方程为:
dp[i][j]表示前i个物品选j对的最小消耗
则如果不选第i个物品,dp[i][j]=dp[i-1][j]
否则,dp[i][j]=dp[i-2][j-1]+后两个物品的消耗
两者取最小即可:dp[i][j] = min(dp[i-1][j], dp[i-2][j-1]+pf(wp[i] - wp[i-1]));
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <iterator>
#include <cstring>
#include <cmath>
#define pf(a) ((a)*(a))
using namespace std;
// dp[i][j]:前i个物品中挑出j对的最小消耗
long long dp[2005][1005];
long long wp[2005];
int main() {
int n, k;
while (cin >> n >> k) {
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; i++) cin >> wp[i];
sort(wp+1, wp+n+1);
dp[2][1] = pf(wp[1] - wp[2]);
for (int i = 3; i <= n; i++) {
for (int j = 1; j<=i/2 && j <= k; j++) {
if (2*j==i) {
long long sum = 0;
for (int k = 1; k <= i; k+=2) {
sum += pf(wp[k]-wp[k+1]);
}
dp[i][j] = sum;
} else {
dp[i][j] = min(dp[i-1][j], dp[i-2][j-1]+pf(wp[i] - wp[i-1]));
}
}
}
cout << dp[n][k] << endl;
}
return 0;
}
- HDU1421
- hdu1421
- HDU1421
- hdu1421
- hdu1421
- hdu1421
- hdu1421
- HDU1421(DP)
- hdu1421(DP)
- hdu1421(dp)
- hdu1421 搬寝室
- HDU1421 搬寝室
- HDU1421--搬寝室
- hdu1421-搬寝室
- HDU1421 搬寝室
- 动态规划 - hdu1421
- hdu1421 搬寝室
- HDU1421 搬寝室
- html事件
- 用AutoCompleteTextView实现历史记录提示
- 如何让你的scrapy爬虫不再被ban
- webstrom代码格式化
- HDU 4283 You Are the One (区间dp)
- hdu1421
- iPhone开发 地图线路
- Android中的各种layout属性
- 从单链表创建中的内存变化来理解结构体指针与二级指针的用法
- 资本市场没有活雷锋
- 余弦定理实现新闻自动分类算法
- 初学FPGA, 怎么从硬件上理解?
- windows xp 和ubuntu系统的共享!待补充........
- ZOJ3882.Help Bob