Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
149141 | 韩立鹏 | 书架问题2 | C++ | 通过 | 100 | 0 MS | 588 KB | 740 | 2024-05-25 16:43:49 |
#include<bits/stdc++.h> using namespace std;int n,k,f[1000][1000]; struct dp{ int height,wide; }a[1000000]; bool Cmp(dp l,dp m){ return l.height<m.height; } int main() { cin>>n>>k; for (int i=1; i<=n; ++i) scanf("%d%d",&a[i].height,&a[i].wide); sort(a+1,a+n+1,Cmp); //按高度排好序 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(a[x].wide-a[i].wide)); } 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; }