Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 821 Accepted Submission(s): 231
Problem Description
携程每年要举行员工运动会,现在需要搭建三角形的场地给运动员们自由活动。
现在有N (3 <= N <= 40)个栅栏段(每个栅栏长度Li (1 <= Li <= 40)),必须刚好用掉所有的栅栏拼成一个最大面积的三角形活动区域,
求这个最大面积。
现在有N (3 <= N <= 40)个栅栏段(每个栅栏长度Li (1 <= Li <= 40)),必须刚好用掉所有的栅栏拼成一个最大面积的三角形活动区域,
求这个最大面积。
Input
* 第一行: 整数 N ,表示有多少个栅栏
* 第 2..N+1行: 共N 行, 每行中包括一个整数, 表示 一个栅栏的长度.( 多个栅栏的长度可以出现相同).
* 第N+3行:第二组数据。
每组数据隔一空行,文件末尾以0结尾。
* 第 2..N+1行: 共N 行, 每行中包括一个整数, 表示 一个栅栏的长度.( 多个栅栏的长度可以出现相同).
* 第N+3行:第二组数据。
每组数据隔一空行,文件末尾以0结尾。
Output
每行输出一个截取后的整数,即最大面积乘以100后的整数。 如果无法构成,输出 -1。
Sample Input
5
1 1 3 3 4
5
12 37 1 4 3 0
Sample Output
692
-1
一道简单的二维背包问题,当时由于有一段时间没有碰这种题,在做这道题的时候也没有向这个方向想....
并只以为很装B的用着组合数字里的,frrerrs图像可以AC。。。但是最后wa的一塌糊涂....
谢安贴一下错误的代码吧....以此为戒.
代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<algorithm> 5 #include<vector> 6 #include<math.h> 7 #include<iostream> 8 #include<functional> 9 using namespace std; 10 int main() 11 { 12 int n,i; 13 double ans,tol; 14 //freopen("test.in","r",stdin); 15 //freopen("test.out","w",stdout); 16 while(scanf("%d",&n)!=EOF) 17 { 18 vector<int>aa(n+1); 19 for(i=0;i<n;i++) 20 cin>>aa[i]; 21 sort(aa.begin(),aa.end(),greater<int>()); 22 for(i=3;i<n;i++) 23 { 24 if(aa[0]>aa[1]) 25 { 26 if(aa[1]>aa[2]) 27 aa[2]+=aa[i]; 28 else 29 aa[1]+=aa[i]; 30 } 31 else 32 { 33 if(aa[0]>aa[2]) 34 aa[2]+=aa[i]; 35 else 36 aa[0]+=aa[i]; 37 } 38 } 39 tol=(aa[0]+aa[1]+aa[2])/2.0; 40 ans=(100.0*sqrt(tol*(tol-aa[0])*(tol-aa[1])*(tol-aa[2]))); //o£?×1?ê? 41 if(ans>1.0e-4) 42 { 43 printf("%d %d %d\n",aa[0],aa[1],aa[2]); 44 printf("%.lf\n",floor(ans)); 45 46 } 47 else 48 printf("-1\n"); 49 } 50 return 0; 51 }