提交时间:2024-05-25 16:44:32

运行 ID: 149142

#include<bits/stdc++.h> using namespace std; int n,k,f[105][105]; struct Book{ int w; int l; }book[105]; bool wdnmd(Book x,Book y){ return x.l<y.l; } int main(){ cin>>n>>k; for(int i=1;i<=n;i++)cin>>book[i].l>>book[i].w; sort(book+1,book+1+n,wdnmd); for(int i=1; i<=n; ++i) //依次处理每一本书 for(int j=2; j<=min(i,n-k); ++j) //选j本书 { f[i][j]=0x3f3f3f3f; for(int x=j-1; x<i; ++x) //枚举上一本书x的位置 f[i][j]=min(f[i][j],f[x][j-1]+abs(book[x].w-book[i].w)); } int ans=f[n][n-k]; for(int i=n-1; i>=n-k; --i)ans=min(ans,f[i][n-k]); cout<<ans; return 0; }