zoukankan      html  css  js  c++  java
  • hdu1421 搬寝室(dp)

    此题是动态规划题。

    解题思路:

    用w[i]存储n个物品的重量,对其进行排序。

    那么当取了第i个物品,必然会取第i-1个物品。

    令dp[i][j]表示前i个物品,取j对的最小疲劳度。

    若取第i个物品

    则:dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]);

    若不取第i个物品

    则:dp[i][j]=dp[i-1][j];

    所以状态转移方程为:dp[i][j]=min(dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),dp[i-1][j]);

    代码:

    #include "stdio.h"
    #include "math.h"
    #include "queue"
    #include "stdlib.h"
    #include "string.h"
    #include "algorithm"
    #include "iostream"
    #define N 100010
    #define inf 2147483646
    #define eps 1e-8
    #define pi acos(-1.0)
    using namespace std;
    int dp[2005][1005];
    int main()
    {
        int n,k,i,j;
        int w[2005];
        while(cin>>n>>k)
        {
            w[0]=0;
            for(i=1;i<=n;i++)
                cin>>w[i];
            sort(w,w+n+1);
            for(i=0;i<=n;i++)
                for(j=1;j<=k;j++)
                dp[i][j]=inf;
            dp[0][0]=0;
            for(i=2;i<=n;i++)
            {
                for(j=1;j*2<=i;j++)
                {
                    dp[i][j]=min(dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),dp[i-1][j]);
                }
            }
            cout<<dp[n][k]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Linux文件和目录管理常用重要命令
    Windows和Linux下Mysql 重置root 密码
    瀑布流vue-waterfall的高度设置
    vue-cli 引入axios及跨域使用
    Vue 脱坑记
    shell基础
    正则
    安装卸载
    压缩打包
    vim工具
  • 原文地址:https://www.cnblogs.com/dj3839/p/5167338.html
Copyright © 2011-2022 走看看