本题细节错的较多。
#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; }