滚动数组
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<set>
#include<vector>
#include<string.h>
#define eps 1e-9
#define nn 105
#define INF 0x7FFFFFFF
typedef long long LL;
using namespace std;
/*-----------------------------never more!---------------------------*/
int a[nn],dp[nn][nn];
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
for(int ca=1;ca<=t;ca++)
{
int n,m;
scanf("%d%d",&n,&m);
int i,j,k;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,0x7F,sizeof(dp));
dp[0][0]=0;
sort(a+1,a+n+1);
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
for(k=0;k<j;k++)
{
if(dp[i-1][k]!=0x7F7F7F7F)
dp[i][j]=min(dp[i][j],dp[i-1][k]+a[j]-a[k+1]);
}
}
}
printf("Case #%d: %d\n",ca,dp[m][n]);
}
}
return 0;
}
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<set>
#include<vector>
#include<string.h>
#define eps 1e-9
#define nn 105
#define INF 0x7FFFFFFF
typedef long long LL;
using namespace std;
/*-----------------------------never more!---------------------------*/
int a[nn],dp[2][nn];
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
for(int ca=1;ca<=t;ca++)
{
int n,m;
scanf("%d%d",&n,&m);
int i,j,k;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
int cur=1;
memset(dp[cur],0x7F,sizeof(dp[cur]));
dp[cur][0]=0;
for(i=1;i<=m;i++)
{
cur^=1;
memset(dp[cur],0x7F,sizeof(dp[cur]));
for(j=1;j<=n;j++)
{
for(k=0;k<j;k++)
{
if(dp[cur^1][k]!=0x7F7F7F7F)
dp[cur][j]=min(dp[cur][j],dp[cur^1][k]+a[j]-a[k+1]);
}
}
}
printf("Case #%d: %d\n",ca,dp[cur][n]);
}
}
return 0;
}
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<set>
#include<vector>
#include<string.h>
#define eps 1e-9
#define nn 105
#define INF 0x7FFFFFFF
typedef long long LL;
using namespace std;
/*-----------------------------never more!---------------------------*/
int a[nn],dp[nn];
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
for(int ca=1;ca<=t;ca++)
{
int n,m;
scanf("%d%d",&n,&m);
int i,j,k;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
memset(dp,0x7F,sizeof(dp));
dp[0]=0;
for(i=1;i<=m;i++)
{
for(j=n;j>0;j--)
{
dp[j]=0x7F7F7F7F;
for(k=0;k<j;k++)
{
if(dp[k]!=0x7F7F7F7F)
dp[j]=min(dp[j],dp[k]+a[j]-a[k+1]);
}
}
}
printf("Case #%d: %d\n",ca,dp[n]);
}
}
return 0;
}