程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 1421 搬寢室 (線性dp 貪心預處理)

HDU 1421 搬寢室 (線性dp 貪心預處理)

編輯:C++入門知識

HDU 1421 搬寢室 (線性dp 貪心預處理)


 

搬寢室
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 20642 Accepted Submission(s): 7013

 

Problem Description

搬寢室是很累的,xhd深有體會.時間追述2006年7月9號,那天xhd迫於無奈要從27號樓搬到3號樓,因為10號要封樓了.看著寢室裡的n件物品,xhd開始發呆,因為n是一個小於2000的整數,實在是太多了,於是xhd決定隨便搬2*k件過去就行了.但還是會很累,因為2*k也不小是一個不大於n的整數.幸運的是xhd根據多年的搬東西的經驗發現每搬一次的疲勞度是和左右手的物品的重量差的平方成正比(這裡補充一句,xhd每次搬兩件東西,左手一件右手一件).例如xhd左手拿重量為3的物品,右手拿重量為6的物品,則他搬完這次的疲勞度為(6-3)^2 = 9.現在可憐的xhd希望知道搬完這2*k件物品後的最佳狀態是怎樣的(也就是最低的疲勞度),請告訴他吧. Input 每組輸入數據有兩行,第一行有兩個數n,k(2<=2*k<=n<2000).第二行有n個整數分別表示n件物品的重量(重量是一個小於2^15的正整數). Output 對應每組輸入數據,輸出數據只有一個表示他的最少的疲勞度,每個一行. Sample Input
2 1
1 3
Sample Output
4
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1421

題目大意:久違的中文題,不解釋

題目分析:顯然左右手物品重量越接近越好,先按照重量從小到大排序,然後預處理出相鄰兩個數的差值的平方b[i] = (a[i + 1] - a[i])^2,這樣預處理也直接把2k化成k了,顯然b[i]和b[i + 1]是不能同時取的,定義dp[i][j]為b數組的前i個取了j個時的最少疲勞度,轉移方程dp[i][j] = min(dp[i - 1][j], dp[i - 2][j - 1] + b[i]),初始化dp[i][0]=0,dp[1][1]=b[1],其他INF

#include 
#include 
#include 
using namespace std;
int const MAX = 2005;
int const INF = 0x3fffffff;
int dp[MAX][MAX], a[MAX], b[MAX];

int main()
{
    int n, k;
    while(scanf(%d %d, &n, &k) != EOF)
    {
        for(int i = 1; i <= n; i++)
            scanf(%d, &a[i]);
        sort(a + 1, a + n + 1);
        int sum = 0;
        for(int i = 1; i < n; i++)
            b[i] = (a[i + 1] - a[i]) * (a[i + 1] - a[i]);
        n --;
        for(int i = 0; i <= n; i++)
        {
            for(int j = 0; j <= k; j++)
                dp[i][j] = INF;
            dp[i][0] = 0;
        }
        dp[1][1] = b[1];
        for(int i = 2; i <= n; i++)
            for(int j = 1; j <= k; j++)
                    dp[i][j] = min(dp[i - 1][j], dp[i - 2][j - 1] + b[i]);
        printf(%d
, dp[n][k]);
    }
}


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved