zoukankan      html  css  js  c++  java
  • HDU 1421 DP

    还是这种思想:dp[i][j]表示前i件物品取j对的最优解

    那么想想dp[i][j]是怎么来的,

    (1)i==j*2    dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1])

    (2)i>j*2       dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]))

    注意long long 会超时 多组输入

    很奇怪的是 我数组开了2002*2002  WA了多次 开大一些  AC...无语...

    贴代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define N 2050
    #define ll int
    
    ll dp[N][N];
    ll a[N];
    
    int main()
    {
        ll n,k,i,j;
    
        while(scanf("%d%d",&n,&k)!=EOF)
        {
            for(i=1;i<=n;i++)
                scanf("%d",&a[i]);
            sort(a+1,a+n+1);
            memset(dp,0,sizeof(dp));
            dp[2][1]=(a[2]-a[1])*(a[2]-a[1]);
    
            for(j=1;j<=k;j++)
                for(i=j*2;i<=n;i++)
                {
                    dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]);
                    if(j*2<i)
                    {
                        dp[i][j]=min(dp[i-1][j],dp[i][j]);
                    }
    
    
                }
            printf("%d
    ",dp[n][k]);
        }
    
        return 0;
    }
    


  • 相关阅读:
    Docker Swarm
    服务器虚拟化
    kubernets的工作流程
    配置docker阿里云加速器
    kubeadm 安装kubernetes集群。
    linux的10个最危险的命令
    18个网络带宽常用命令
    column命令
    dd命令
    scp命令
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3320185.html
Copyright © 2011-2022 走看看