nyoj 6 喷水装置(一)

来源:互联网 发布:国家专利数据库 编辑:程序博客网 时间:2024/05/16 13:38

http://acm.nyist.net/JudgeOnline/problem.php?pid=6

典型的贪心,最优装载问题。

每个喷水口最大覆盖长度为:2*sqrt(a[i]*a[i]-1

把喷水口半径从大到小排列,从最大的开始取就可以。

注意:半径1以及以下的喷水装置一点用也没有。题目中说肯定会全部湿润,所以不用管这种情况。

#include <iostream>#include <cmath>using namespace std;double a[610];int main(){int m;cin>>m;while(m--){int n;cin>>n;for(int i=0;i<n;i++){cin>>a[i];}for(int i=0;i<n-1;i++)for(int j=i+1;j<n;j++){if(a[i]<a[j]) swap(a[i],a[j]);}double length=0;for(int i=0;i<n;i++){length+=2*sqrt(a[i]*a[i]-1);if(length>=20) {cout<<i+1<<endl;break;}}}return 0;}