搬寝室
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10915 Accepted Submission(s): 3661
2 1 1 3
4
思路:先排序,很明显,是和离其最近的方差和最小。
f[a][b],前a件物品拿b次的最少疲劳度。
f[a][b]=min(f[a-1][b],f[a-2][b-1]+(s[a]-s[a-1])^2);
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int mm=3010;
const int oo=1e9;
long long f[mm][mm];
int n,k;
int s[mm];
long long fan(int x,int y)
{
long long z=(x-y)*(x-y);
return z;
}
int main()
{
while(cin>>n>>k)
{
for(int i=0;i<n;i++)cin>>s[i];
sort(s,s+n);
for(int i=0;i<=n;i++)
for(int j=0;j<=k;j++)
f[i][j]=oo;
for(int i=0;i<=n;i++)
f[i][0]=0;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=i&&j<=k;j++)
{
f[i][j]=min(f[i-1][j],f[i-2][j-1]+fan(s[i-1],s[i-2]));
}
}
cout<<f[n][k]<<"\n";
}
}
677



被折叠的 条评论
为什么被折叠?



