本题细节错的较多。
#include<algorithm>
#include<iostream>
#include<cmath>
#define inf 20000000
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
using namespace std;
const int maxn=250;
int miin(int a,int b){return a<b?a:b;}
struct Bk{
int h,d;
bool operator < (const Bk &b)const{
return h<b.h;
}
}shu[maxn];
int n,K,Ans,a[maxn],f[maxn][maxn];
int main(){
cin>>n>>K;
K=n-K;
if(K==0){
cout<<0;
return 0;
}
rep(i,1,n)cin>>shu[i].h>>shu[i].d;
sort(shu+1,shu+n+1);//
rep(i,1,n)//这三行多次因为调试删掉后忘了加回来,调试应注释掉而不是删掉
a[i]=shu[i].d;//
rep(i,0,n)
rep(k,0,K)
f[i][k]=inf;
rep(i,1,n)f[i][1]=0;
rep(i,2,n)
for(int k=2;k<=i&&k<=K;k++)
rep(j,k-1,i-1)
f[i][k]=miin(f[i][k],f[j][k-1]+abs(a[i]-a[j]));
Ans=inf;
rep(i,K,n)//
Ans=miin(f[i][K],Ans);//应注意f[i][j]表示1-i中选k个且第k个是i的取法,需遍历一遍f[i][k]。
cout<<Ans;//
return 0;
}
京公网安备 11010502036488号