zoukankan      html  css  js  c++  java
  • tyvj1125 JR's chop

    描述

    JR有很多双筷子。确切的说应该是很多根,因为筷子的长度不一,很难判断出哪两根是一双的。JR家里来了K个客人,JR留下他们吃晚饭。加上JR,JR的girl friend和JR的朋友内涵,共K+3个人。每人需要用一双筷子。JR只好清理了一下筷子,共N根,长度为T1,T2,T3,……,TN.现在他想用这些筷子组合成K+3双,使每双的筷子长度差的平方和最小。

    输入格式

    输入文件共有两行,第一行为两个用空格隔开的整数,表示N,K(1≤N≤100, 0<K<50),第二行共有N个用空格隔开的整数,为Ti.每个整数为1~50之间的数。

    输出格式

    输出文件仅一行。如果凑不齐K+3双,输出-1,否则输出长度差平方和的最小值。

    测试样例1

    输入

    10 1 
    1 1 2 3 3 3 4 6 10 20

    输出

    5

    备注

    第一双 1 1
    第二双 2 3
    第三双 3 3
    第四双 4 6
    (1-1)^2+(2-3)^2+(3-3)^2+(4-6)^2=5
     
    //chopsticks弱化版
    
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int m,n,a[5005];
    long long dp[1005][5005];
    int main(){
        cin>>n>>m;
        for(int i = n;i >= 1;i--){
            scanf("%d",&a[i]);
        }
        sort(a+1,a+1+n);
        m += 3;
        for(int i = 1;i <= m;i++){
            for(int j = 1;j <= n;j++){
                if(j < i * 2) dp[i][j] = 9876543212345L;
                else dp[i][j] = min(dp[i][j-1],dp[i-1][j-2] + (a[j] - a[j-1]) * (a[j] - a[j-1]));
            }
        }
        cout<<(dp[m][n] == 9876543212345L ? -1 : dp[m][n]);
        return 0;
    }
  • 相关阅读:
    作业呢
    留言板
    题解 lg2480 古代猪文
    题解 lg4139 上帝与集合的正确用法
    AFO
    题解 lg2946 [USACO09MAR]Cow Frisbee Team S
    题解 lg4158 [SCOI2009]粉刷匠
    题解 HDU4035 Maze
    题解 lg3232 [HNOI2013]游走
    题解 HDU4652 Dice
  • 原文地址:https://www.cnblogs.com/hyfer/p/5791391.html
Copyright © 2011-2022 走看看