记录编号 231485 评测结果 AAAAA
题目名称 [Tyvj国庆欢乐赛] 武器分配 最终得分 100
用户昵称 GravatarMagic_Sheep 是否通过 通过
代码语言 C++ 运行时间 0.065 s
提交时间 2016-02-26 20:29:14 内存使用 7.95 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. long long a[100],b[100],f[100][100][100];
  7. int main()
  8. {
  9. freopen("weapon.in","r",stdin);
  10. freopen("weapon.out","w",stdout);
  11. int n,a1,b1;
  12. scanf("%d%d%d",&n,&a1,&b1);
  13. for(int i=1;i<=a1;i++)
  14. {
  15. scanf("%d",&a[i]);
  16. }
  17. for(int i=1;i<=b1;i++)
  18. {
  19. scanf("%d",&b[i]);
  20. }
  21. memset(f,0x7f7f7f,sizeof(f));
  22. //排序;听说会快一点;
  23. sort(a+1,a+a1+1);
  24. sort(b+1,b+b1+1);
  25. for(int i=0;i<=a1;i++) f[0][i][0]=0;//初始化;
  26. for(int j=0;j<=b1;j++) f[0][0][j]=0;//划分状态前k个人在前i件机枪和前j件铠甲上选;
  27. for(int k=1;k<=n;k++)
  28. {
  29. for(int i=1;i<=a1;i++)
  30. {
  31. for(int j=1;j<=b1;j++)
  32. {
  33. f[k][i][j]=min(f[k][i-1][j],f[k][i][j-1]);//不选;
  34. f[k][i][j]=min(f[k-1][i-1][j-1]+(a[i]-b[j])*(a[i]-b[j]),f[k][i][j]);//选;
  35. }
  36. }
  37. }
  38. long long minn=0x3f3f3f;
  39. for(int i=0;i<=a1;i++)
  40. {
  41. for(int j=0;j<=b1;j++)
  42. {
  43. minn=min(f[n][i][j],minn);
  44. // cout<<minn<<" ";
  45. }
  46. //cout<<endl;
  47. }
  48. cout<<minn<<endl;
  49. return 0;
  50. }//BY魔术羊