• 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;
    }
  • 相关阅读:
    视频输入 范例
    视频输出 范例
    开启VI视频输入设备 范例
    初始化MMP系统 范例
    Git 的使用
    DVS/DVR/NVR/XVR
    shell命令中 && 和 || 的区别
    码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清
    DNS与DSN
    ob_start()失效与phpunit的非正常结束
  • 原文地址:https://www.cnblogs.com/hyfer/p/5791391.html
Copyright © 2020-2023  润新知