记录编号 45542 评测结果 AAAAAAAAAAA
题目名称 三角形牧场 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.371 s
提交时间 2012-10-24 14:28:08 内存使用 5.11 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. int a[50],s[50];
  8. bool f[1610][1610];
  9.  
  10. void swap(int& a,int& b)
  11. {
  12. int temp;
  13. temp=a;
  14. a=b;
  15. b=temp;
  16. }
  17.  
  18. double cal(int a,int b,int c)
  19. {
  20. if (b>c)
  21. swap(b,c);
  22. if (a>b)
  23. swap(a,b);
  24. if (b>c)
  25. swap(b,c);
  26. if (a+b<c||a==0)
  27. return(0);
  28. double p,ans=0;
  29. p=(a+b+c)/2.0;
  30. ans=sqrt(p*(p-a)*(p-b)*(p-c));
  31. return(ans);
  32. }
  33.  
  34. int main(void)
  35. {
  36. freopen("pasture.in","r",stdin);
  37. freopen("pasture.out","w",stdout);
  38. int i,j,k,n;
  39. double maxs=0,temp;
  40. cin>>n;
  41. for (i=1;i<=n;i++)
  42. {
  43. cin>>a[i];
  44. s[i]=s[i-1]+a[i];
  45. }
  46. f[0][a[1]]=true;
  47. f[a[1]][0]=true;
  48. f[0][0]=true;
  49. for (i=2;i<=n;i++)
  50. for (j=s[i];j>=0;j--)
  51. for (k=s[i];k>=0;k--)
  52. {
  53. if (j-a[i]>=0)
  54. if (f[j-a[i]][k])
  55. f[j][k]=true;
  56. if (k-a[i]>=0)
  57. if (f[j][k-a[i]])
  58. f[j][k]=true;
  59. }
  60. for (i=1;i<=s[n];i++)
  61. for (j=1;j<=s[n];j++)
  62. if (f[i][j])
  63. {
  64. temp=cal(i,j,s[n]-i-j);
  65. if (maxs<temp)
  66. maxs=temp;
  67. }
  68. if (maxs==0)
  69. cout<<"-1\n";
  70. else
  71. cout<<int(maxs*100)<<endl;
  72. return(0);
  73. }