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;
    }
  • 相关阅读:
    Mathematica 计算矩阵的伴随矩阵
    教你如何在word中像LaTex那样打出漂亮的数学公式
    中国科学院大学2016年硕转博考试试题
    161024解答
    161023解答
    161020-1解答
    关于查询扩展版ESI高被引论文的说明
    [Tex学习笔记]让项目编号从4开始
    [Tex学习]WinEdit 常用软件快捷键
    最著名的数学家一般也是最著名的力学家
  • 原文地址:https://www.cnblogs.com/hyfer/p/5791391.html
Copyright © 2011-2022 走看看