NC14117. Training Plan
描述
输入描述
第一行是一个正整数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
说明:
对于第一组样例,最优方案是一天刷一题。C++ 解法, 执行用时: 239ms, 内存消耗: 2392K, 提交时间: 2022-07-22 16:36:26
#include<bits/stdc++.h> #define LL long long #define N 505 using namespace std; int n,m; LL a[N],dp[N][N]; int main(){ int T; cin>>T; while(T--){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); memset(dp,5000000,sizeof(dp)); dp[0][0]=0; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) for(int k=j;k<=n;k++) dp[i][k]=min(dp[i][k],(dp[i-1][j-1]+(a[k]-a[j])*(a[k]-a[j]))); cout<<dp[m][n]<<endl; } }