zoukankan      html  css  js  c++  java
  • hdu 1421 搬寝室 动态规划

    http://acm.hdu.edu.cn/showproblem.php?pid=1421

    d[n][m] : 在前n个物品里选m对的最小疲劳

    当地n件不选时 d[n][m]=d[n-1][m]

    当第n件选是 第n件一定是与第n-1件一起组成一对 d[n][m]=d[n-2][m-1]+(a[n]-a[n-1])^2

    所以动态转移方程为   d[i][j]=min1(d[i-1][j],d[i-2][j-1]+(a[i-1]-a[i])*(a[i-1]-a[i]));

    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int
    a[2003],d[2003][2003];
    int
    min1(int a,int b)
    {

        return
    a<b?a:b;
    }

    int
    main()
    {

        int
    i,j,m,n;
        while
    (scanf("%d%d",&n,&m)!=EOF)
        {

            for
    (i=1;i<=n;i++)
                scanf("%d",&a[i]);
            sort(a+1,a+n+1);
            memset(d,0,sizeof(d));
            for
    (i=2;i<=n;i++)
                for
    (j=1;j<=m;j++)
                {

     
                    if(2*j==i)
                        d[i][j]=d[i-2][j-1]+(a[i-1]-a[i])*(a[i-1]-a[i]);
                    else

                       d[i][j]=min1(d[i-1][j],d[i-2][j-1]+(a[i-1]-a[i])*(a[i-1]-a[i]));
                }

                printf("%d\n",d[n][m]);
        }

        return
    0;
    }




  • 相关阅读:
    会话技术
    Http
    tomcat
    xml
    javascript
    css
    Html
    递归
    二叉树的相关复习
    vim学习
  • 原文地址:https://www.cnblogs.com/assult/p/3052111.html
Copyright © 2011-2022 走看看