1 条题解

  • 0
    @ 2025-10-8 16:48:51

    【参考程序】

    #include<bits/stdc++.h>
    using namespace std;
    int a[110],f[60][110];//a数组从小到大排序后,f[i][j]表示 a[1]-a[j]组成i对筷子的最优解。
    int main()
    {
        int n,K;scanf("%d%d" ,&n,&K);if(n/2<K) {printf("-1\n");return 0;}
        for(int i=1;i<=n;i++) scanf("%d" ,&a[i]);
        sort(a+1,a+n+1);
        memset(f,63,sizeof(f));
        for(int i=0;i<=n;i++) f[0][i]=0;
        for(int ki=1;ki<=K;ki++)
           for(int i=2*ki;i<=n;i++)
           {
    			f[ki][i]=min(f[ki][i-1],f[ki-1][i-2]+(a[i]-a[i-1])*(a[i]-a[i-1]));
           }
         
        printf("%d\n",f[K][n]);
        return 0;
    }
    
    • 1

    *【动态规划:状态设计DP】筷子

    信息

    ID
    243
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    172
    已通过
    65
    上传者