UVALive 6434 Number Assignment(dp)

来源:互联网 发布:网游自动挂机软件 编辑:程序博客网 时间:2024/05/16 15:17

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47581

#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll inf = 1e15;const int N = 105;int n, m;ll dp[N][N];ll a[N];void init() {    for (int i=1; i<=n; i++) {        for (int j=1; j<=n; j++) {            dp[i][j]=inf;        }    }    for (int i=1; i<=n; i++) {        dp[i][1]=a[i]-a[1];    }}int main() {    int T, ca = 1;    scanf("%d", &T);    while (T--) {        scanf("%d%d", &n, &m);        for (int i=1; i<=n; i++) {            scanf("%lld", &a[i]);        }        sort(a+1,a+1+n);        init();        for (int i=1; i<=n; i++) {            for (int j=2; j<=m; j++) {                for (int k=1; k<=i-1; k++) {                    if (i-k>1) {                        dp[i][j]=min(dp[i][j],dp[k][j-1]+a[i]-a[k+1]);                    } else {                        dp[i][j]=min(dp[i][j],dp[k][j-1]);                    }                }            }        }        printf("Case #%d: %lld\n", ca++, dp[n][m]);    }    return 0;}


0 0