|
|
| |
| 【问题描述】 |
| |
|
| ||
|
|
| |
| 【输入格式】 |
| |
|
| ||
|
|
| |
| 【输出格式】 |
| |
|
| ||
|
|
| |
| 【输入样例】 |
| |
|
| ||
|
|
| |
| 【输出样例】 |
| |
|
| ||
|
|
| |
| 【数据范围】 |
| |
|
| ||
————————————贪心策略—————————————
- 分析
这次要我们做的是给男生女生分配舞伴,问题是要求出最多舞蹈者组数,也就是求一个最优答案,所以往后的目标就在于:如何做到每一步“看起来最优”
也就是让每一个舞者所配对的人都恰好处在条件(升高差 < C )边缘
2. 分步
这道题的分步很显然是依照配对过程(次数)进行分步,则总步数为:n+m
3. 方案
这道题的方案可以视为:为一位舞者分配最优舞伴,而我们要是他们是恰好的“天生一对” ,不妨在此前先进行排序(推荐:sort),让后从最矮的舞者间开始比较,然后再逐步修改选中舞者
————————————代码实现—————————————
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 int Boy[1005],Girl[1005]; 6 int m,n,c; 7 bool cmp(int a,int b){ 8 return a<b; 9 } 10 int main(){ 11 cin>>m>>n>>c; 12 for(int i=1;i<=m;i++){ 13 cin>>Boy[i]; 14 } 15 for(int i=1;i<=n;i++){ 16 cin>>Girl[i]; 17 } 18 sort(Boy+1,Boy+1+m,cmp); 19 sort(Girl+1,Girl+1+n,cmp); 20 int a=1; //记录当前选中男生 21 int b=1; //记录当前选中女生 22 int count=0; //当前舞者数量 23 while(a<=m && b<=n){ //还有剩男和剩女 24 if(Boy[a]-Girl[b]>c){ //如果男生太高 25 b++; //访问下一个女生 26 } 27 else if(Girl[b]-Boy[a]>c){ //如果女生太高 28 a++; //访问下一个男生 29 } 30 else { 31 a++; 32 b++; 33 count++; 34 } 35 } 36 cout<<count; 37 }
其中有关sort链接:http://www.cnblogs.com/A-Song/archive/2012/02/02/2336337.html