比赛 动态规划练习赛1102 评测结果 MMMMMMMMMM
题目名称 地图着色 最终得分 0
用户昵称 小金 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-11-02 21:59:18
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long f[3010][3010][11],a[3010];
  4. int n,m;
  5. long long qp(int l,int r)
  6. {
  7. long long s=0,p;
  8. if((r-l+1)^1)
  9. {
  10. int mid=(l+r)/2;
  11. p=a[mid];
  12. }
  13. else
  14. {
  15. int mid=(l+r)/2;
  16. p=(a[mid]+a[mid+1])/2;
  17. }
  18. for(int i=l;i<=r;i++)
  19. {
  20. s+=abs(a[i]-p);
  21. }
  22. return s;
  23. }
  24. int main()
  25. {
  26. freopen("map.in","r",stdin);
  27. freopen("map.out","w",stdout);
  28. memset(f,0x3f,sizeof(f));
  29. cin>>n>>m;
  30. for(int i=1;i<=n;i++)
  31. {
  32. cin>>a[i];
  33. }
  34. sort(a+1,a+n+1);
  35. for(int i=1;i<=n;i++)
  36. {
  37. for(int j=i;j<=n;j++)
  38. {
  39. f[i][j][1]=qp(i,j);
  40. //cout<<i<<' '<<j<<' '<<f[i][j][1]<<endl;
  41. }
  42. }
  43. for(int x=2;x<=m;x++)
  44. {
  45. for(int i=1;i<=n;i++)
  46. {
  47. for(int j=i;j<=n;j++)
  48. {
  49. for(int k=i;k<j;k++)
  50. {
  51. f[i][j][x]=min(f[i][j][x],f[i][k][x-1]+f[k+1][j][x-1]);
  52. }
  53. }
  54. }
  55. }
  56. cout<<f[1][n][m];
  57. return 0;
  58. }