hdu 1421,一直超时,请大家伙儿帮忙看看
hdu 1421,一直超时,请大家帮忙看看
#include<iostream>
#include<algorithm>
using namespace std;
int k,n;
int a[2002],f[2002][1001];
bool cmp(int a,int b)
{
return a>b;
}
int min(int a,int b)
{
if(a<b)return a;
else return b;
}
int main()
{
while(cin>>n>>k)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);
f[0][0]=0;
for(int i=2;i<=n;i++)
for(int j=1;j<=k&&j<=i/2;j++)
{
if(i=2*j)
f[i][j]=f[i-2][j-1]+((a[i-1]-a[i-2])*(a[i-1]-a[i-2]));
else
f[i][j]=min(f[i-1][j],f[i-2][j-1]+((a[i-1]-a[i-2])*(a[i-1]-a[i-2])));
}
printf("%d\n",f[n][k]);
}
return 0;
}
------解决方案--------------------
楼主太不仔细了哈~ 少写了一个等号
#include<iostream>
#include<algorithm>
using namespace std;
int k,n;
int a[2002],f[2002][1001];
bool cmp(int a,int b)
{
return a>b;
}
int min(int a,int b)
{
if(a<b)return a;
else return b;
}
int main()
{
while(cin>>n>>k)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);
f[0][0]=0;
for(int i=2;i<=n;i++)
for(int j=1;j<=k&&j<=i/2;j++)
{
if(i=2*j)
f[i][j]=f[i-2][j-1]+((a[i-1]-a[i-2])*(a[i-1]-a[i-2]));
else
f[i][j]=min(f[i-1][j],f[i-2][j-1]+((a[i-1]-a[i-2])*(a[i-1]-a[i-2])));
}
printf("%d\n",f[n][k]);
}
return 0;
}
------解决方案--------------------
楼主太不仔细了哈~ 少写了一个等号
- C/C++ code
if(i==2*j)
------解决方案--------------------
楼主太不仔细了哈~ 少写了一个等号
C/C++ code
if(i==2*j)