zoukankan      html  css  js  c++  java
  • Training Plan

    Training Plan

    https://www.nowcoder.com/acm/contest/12/F

    题目描述

    小Q同学为了准备今年的ICPC Regional,计划在m天之内刷掉n道题,每道题有一个难度值,其中第i道题的难度值为a[i]。
    然而处于半颓废状态中的小Q同学不希望在同一天中做难度差距悬殊的题目,定义第i天中刷的题的难度的最大值减最小值为d[i](如果第i天没有刷题,则d[i]=0),那么整个计划的难度为
    小Q同学可以按照任意的顺序刷题,并且一天中可以刷任意多道题,但是每道题只需要做一次,现在小Q同学想知道完成这个计划的总难度的最小值是多少。

    输入描述:

    第一行是一个正整数T(≤ 10),表示测试数据的组数,
    对于每组测试数据,
    第一行是两个整数n(1≤ n ≤ 500)和m(1≤ m ≤ 500),表示题数和天数,
    第二行是n个整数a[i](0≤ a[i]≤ 1000000),表示每道题的难度值。

    输出描述:

    对于每组测试数据,输出一个整数,表示整个计划的最小难度。
    示例1

    输入

    2
    3 3
    1 2 3
    3 2
    1 2 3

    输出

    0
    1

    说明

    对于第一组样例,最优方案是一天刷一题。
    对于第二组样例,一个最优方案是第一天刷难度值为1和2的题,第二天刷难度值为3的题。
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<climits>
    
    using namespace std ; 
    
    #define maxn 505
    #define LL long long
    LL num[maxn][maxn] ; 
    
    int n , m ; 
    int t ; 
    LL a[maxn] ; 
    LL dp[maxn][maxn] ; 
    
    
    int main(){
            
        scanf("%d" , &t) ; 
        
        for(int i=1 ;i<=t ; i++){
            scanf("%d%d" , &n , &m) ; 
            
            
            for(int i=1 ; i<= n ; i++){
                scanf("%d" , &a[i]) ;  
            } 
            sort(a+1 , a+n+1) ; 
            memset(dp , 0 , sizeof(dp)) ; 
            
            for(int j=1 ; j<=n ; j++){
                dp[1][j] = (a[j] - a[1])*(a[j]-a[1]) ; 
            }
    
            for(int j=2 ; j<=m ; j++){
                for(int k=1 ; k<=n ; k++){
                    dp[j][k] = 10000000000000007 ; 
                    for(int L = 1 ; L < k ; L++){
                        dp[j][k] = min(dp[j][k] , dp[j-1][L]+(a[k]-a[L+1])*(a[k]-a[L+1])) ; 
                    }
                }
            }
            
            printf("%lld
    " , dp[m][n]) ; 
        }
        
        
        return 0 ; 
    }
    View Code
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    long long a[510], dp[510][510];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
           int m, n;
           scanf("%d %d",&n, &m);
            
           for(int i=1; i<=n; i++)
              scanf("%lld",&a[i]);
            
           sort(a+1, a+n+1);
            
           if(n <= m)
           {
               printf("0
    ");
               continue;
           }
            
           memset(dp, 0, sizeof(dp));
            
           for(int i=1; i<=n; i++)
           dp[1][i] = (a[i] - a[1]) * (a[i] - a[1]);
           
           for(int i=2; i<=m; i++)
             {     
                for(int j=i+1; j<=n; j++)
                   {
                         dp[i][j] = 1000000000000007;
                         
                      for(int k=i-1; k<=j; k++)
                      {
                           dp[i][j] = min(dp[i][j], dp[i-1][k] + (a[j] - a[k+1]) * (a[j] - a[k+1]));
                      }
                   }
             }
           
           printf("%lld
    ",dp[m][n]);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    接口的幂等性怎么设计?
    python 实现批量 WKT 转 KML
    火星坐标(GCJ02)高精度反算
    GDAL RasterIO 速度测试程序
    linux下 QtCreator 运行不显示 qDebug 输出的问题
    我使用的 clang-format 配置文件
    cephadm 离线安装部署 ceph 集群记录
    解决vcpkg无法交叉编译arm64版本 HDF5 库的问题
    QEMU 虚拟 aarch64(arm64) 记录
    DE-9IM 空间关系模型
  • 原文地址:https://www.cnblogs.com/yi-ye-zhi-qiu/p/7616375.html
Copyright © 2011-2022 走看看