HDU1052 (贪心)
2012-02-02 16:18
190 查看
田忌赛马,经典的贪心,每次都用最快跟最快的,最慢的跟最慢的进行比较、判断
1)若田最快的比王最快的慢,则用最慢的跟王最快的比,输掉一局;反之,则赢了当然是最划算的选择了
2)若田最慢的比王最慢的还慢,则用最慢的跟王最快的比,输掉一局;反之,同上。
具体解题思路如下:
1.当田忌最慢的马比齐王最慢的马快,赢一场先。因为始终要赢齐王最慢的马,不如用最没用的马来赢它。
2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场。因为田忌最慢的马始终要输的,不如用它来消耗齐王最有用的马。
3.当田忌最慢的和齐王最慢的马慢相等时,分4和5讨论。
4.当田忌最快的马比齐王最快的马快时,赢一场先。因为最快的马的用途就是来赢别人快的马,别人慢的马什么马都能赢。
5.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场,因为反正要输一场,不如拿最没用的马输。
6.当田忌最快的马和齐王最快的马相等时,这就要展开讨论了,贪心方法是,拿最慢的马来和齐王最快的马比。
代码如下:
View Code
1 #include<iostream>
2 #include<algorithm>
3 using namespace std;
4
5 #define Max 1005
6 int t[Max],k[Max];
7
8 bool cmp (int x,int y)
9 {
10 return x<y;
11 }
12
13 int main()
14 {
15 int n,i,j;
16 while(cin>>n)
17 {
18 if(n==0) break;
19 for(i=0;i<n;i++)
20 cin>>t[i];
21 for(j=0;j<n;j++)
22 cin>>k[j];
23 sort(t,t+n,cmp);//排序,速度慢的在前面
24 sort(k,k+n,cmp);
25 int sum=0,end1=n-1,end2=n-1;
26 i=0; j=0;
27 while(i<=end1&&j<=end2)
28 {
29 if(t[i]>k[j])//最慢的马进行比较
30 { i++; j++; sum++; }
31 else if(t[i]<k[j])//若最慢的比王的还慢,则用来跟王的最快比
32 { i++; end2--; sum--;}
33 else {
34 if(t[end1]>k[end2]) //最快的马进行比较
35 { end1--; end2--; sum++; }
36 else if(t[end1]<k[end2])//若最快的比王的最快的还慢,则用最慢的跟王的最快的比
37 { i++; end2--; sum--;}
38 else{
39 if(t[i]==k[end2]) //剩下的马均相等的情况
40 break;
41 else
42 { i++; end2--; sum--; }
43 }
44 }
45 }
46 cout<<sum*200<<endl;
47 }
48 return 0;
49 }
1)若田最快的比王最快的慢,则用最慢的跟王最快的比,输掉一局;反之,则赢了当然是最划算的选择了
2)若田最慢的比王最慢的还慢,则用最慢的跟王最快的比,输掉一局;反之,同上。
具体解题思路如下:
1.当田忌最慢的马比齐王最慢的马快,赢一场先。因为始终要赢齐王最慢的马,不如用最没用的马来赢它。
2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场。因为田忌最慢的马始终要输的,不如用它来消耗齐王最有用的马。
3.当田忌最慢的和齐王最慢的马慢相等时,分4和5讨论。
4.当田忌最快的马比齐王最快的马快时,赢一场先。因为最快的马的用途就是来赢别人快的马,别人慢的马什么马都能赢。
5.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场,因为反正要输一场,不如拿最没用的马输。
6.当田忌最快的马和齐王最快的马相等时,这就要展开讨论了,贪心方法是,拿最慢的马来和齐王最快的马比。
代码如下:
View Code
1 #include<iostream>
2 #include<algorithm>
3 using namespace std;
4
5 #define Max 1005
6 int t[Max],k[Max];
7
8 bool cmp (int x,int y)
9 {
10 return x<y;
11 }
12
13 int main()
14 {
15 int n,i,j;
16 while(cin>>n)
17 {
18 if(n==0) break;
19 for(i=0;i<n;i++)
20 cin>>t[i];
21 for(j=0;j<n;j++)
22 cin>>k[j];
23 sort(t,t+n,cmp);//排序,速度慢的在前面
24 sort(k,k+n,cmp);
25 int sum=0,end1=n-1,end2=n-1;
26 i=0; j=0;
27 while(i<=end1&&j<=end2)
28 {
29 if(t[i]>k[j])//最慢的马进行比较
30 { i++; j++; sum++; }
31 else if(t[i]<k[j])//若最慢的比王的还慢,则用来跟王的最快比
32 { i++; end2--; sum--;}
33 else {
34 if(t[end1]>k[end2]) //最快的马进行比较
35 { end1--; end2--; sum++; }
36 else if(t[end1]<k[end2])//若最快的比王的最快的还慢,则用最慢的跟王的最快的比
37 { i++; end2--; sum--;}
38 else{
39 if(t[i]==k[end2]) //剩下的马均相等的情况
40 break;
41 else
42 { i++; end2--; sum--; }
43 }
44 }
45 }
46 cout<<sum*200<<endl;
47 }
48 return 0;
49 }
相关文章推荐
- HDU1052 Tian Ji -- The Horse Racing(贪心)
- hdu1052(贪心)
- HDU1052 Tian Ji -- The Horse Racing【贪心】
- HDU1052 Tian Ji -- The Horse Racing(贪心)
- HDU1052 Tian Ji -- The Horse Racing(贪心)
- HDU1052 Tian Ji -- The Horse Racing 田忌赛马 贪心
- [HDU1052]Tian Ji -- The Horse Racing[贪心]
- 【贪心】[hdu1052]Tian Ji -- The Horse Racing(田忌赛马)[c++]
- HDU1052 Tian Ji -- The Horse Racing(贪心)
- hdu1052 田忌赛马 —— 贪心
- POJ2287 HDU1052 Tian Ji -- The Horse Racing【贪心】
- hdu1052 贪心
- HDU1052-Tian Ji -- The Horse Racing-贪心
- hdu1052 Tian Ji -- The Horse Racing(贪心)
- hdu1052 Tian Ji -- The Horse Racing (贪心,田忌赛马)
- 贪心——田忌赛马(HDU1052)
- HDU1052 田忌赛马 贪心
- hdu1052 田忌赛马 贪心正确性证明
- HDU1052 Tian Ji -- The Horse Racing 贪心
- HDU1052 田忌赛马 贪心