hdu 1052 Tian Ji -- The Horse Racing(很好的贪心)
2012-05-07 22:26
381 查看
题目分析:
这题的题意就是求怎么让田忌赢最多,可以赢负的。
算法是先将两个都排序,然后按1、田忌的快马比齐王的快,直接比掉。2、若快马没有快,拿田忌最慢的和齐王最慢的比较,若快直接比掉。3、若慢马比齐王慢,就拿田忌最慢的和齐王最快的比较。
按这个算法就可以啦!不过有一组很好的测试数据。
4
1 2 4 5
2 3 3 4
注意:1.很好的贪心题
2. 哎,贪心都不会了,可悲呀,原来的思路彻底错了。。。。。
3.注意不要拘泥于一段,,,
这题的题意就是求怎么让田忌赢最多,可以赢负的。
算法是先将两个都排序,然后按1、田忌的快马比齐王的快,直接比掉。2、若快马没有快,拿田忌最慢的和齐王最慢的比较,若快直接比掉。3、若慢马比齐王慢,就拿田忌最慢的和齐王最快的比较。
按这个算法就可以啦!不过有一组很好的测试数据。
4
1 2 4 5
2 3 3 4
注意:1.很好的贪心题
2. 哎,贪心都不会了,可悲呀,原来的思路彻底错了。。。。。
3.注意不要拘泥于一段,,,
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int cmp(int x,int y) { return x>y; } int main() { int a[1200],b[1200]; int n; while(scanf("%d",&n)!=EOF&&n!=0) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); sort(a+1,a+1+n,cmp); sort(b+1,b+1+n,cmp); /*for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); for(int i=1;i<=n;i++) printf("%d ",b[i]); printf("\n");*/ int h1,h2,t1,t2; int w=0,l=0; h1=1,h2=1,t1=n,t2=n; for(int i=1;i<=n;i++) { if(a[h1]>b[h2]) { w++; h1++; h2++; } /*else if(a[h1]==b[h2]) { }*/ else { if(a[t1]>b[t2])//最慢的和最慢的比较 { w++; t1--; t2--; } else//最慢的和最快的比较a[t1]与b[h2]比较 { if(a[t1]==b[h2]) ; else l++; t1--; h2++; } } } printf("%d\n",(w-l)*200); }// system("pause"); return 0; } /*我这种的思想是,先升序排列,用田最慢的马和齐王最慢的比较,如快 直接比掉;若慢,就和齐王最快的比掉 如相等,看下一对,,, #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int cmp(int x,int y) { return x<y; } int main() { int a[1200],b[1200]; int vis[1200]; int n; while(scanf("%d",&n)!=EOF&&n!=0) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); sort(a+1,a+1+n,cmp); sort(b+1,b+1+n,cmp); /*for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); for(int i=1;i<=n;i++) printf("%d ",b[i]); printf("\n"); memset(vis,0,sizeof(vis)); int win=0,l=0,tail=n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(vis[j]==0) { if(a[i]>b[j]) { win++; vis[j]=1; } else { /* if(a[i]<b[tail] && vis[tail]==0)//小于等于就让田输掉。。。是错的 { //5;1 2 2 4 5 ;2 2 3 3 4 l++; } vis[tail]=1; tail--; //break;放错位置了 if(a[i]==b[j] && i+1<=n && j+1<=tail && a[i+1]!=b[j+1])//这一局平了 { vis[j]=1; break; } if(a[i]<b[j]&&vis[tail]==0)//输掉 { l++; vis[tail]=1; tail--; } } break; } //printf("w=%d l=%d\n",win,l); int ans=(win-l)*200; printf("%d\n",ans); } system("pause"); return 0; } */ /* 3 15 12 9 16 13 9 ******** 5 7 8 9 12 15 7 8 9 13 16 *************** 4 1 2 4 5 2 3 3 4 200这组数据很好.... */ /* #include<iostream> #include<algorithm> using namespace std; int main() { int a[1005],b[1005]; int i,n,sum,aa,ab,ba,bb; while(cin>>n&&n) { for(i=0;i<n;i++) cin>>a[i]; for(i=0;i<n;i++) cin>>b[i]; sort(a,a+n); sort(b,b+n); aa=0;ab=n-1;ba=0;bb=n-1; sum=0; for(i=0;i<n;i++) { if(a[ab]>b[bb]) {ab--;bb--;sum++;continue;} if(a[aa]<b[ba]) {aa++;bb--;sum--;continue;} if(a[aa]>b[ba]) {aa++;ba++;sum++;continue;} if(a[aa]==b[ba]) { if(a[aa]<b[bb]) sum--; else { if(a[aa]>b[bb]) sum++; } aa++;bb--; } } sum=sum*200; cout<<sum<<endl; } return 0; } */
相关文章推荐
- hdu 1052 Tian Ji -- The Horse Racing(贪心)
- hdoj.1052 Tian Ji -- The Horse Racing【贪心】 2015/04/20
- hdu 1052 Tian Ji -- The Horse Racing(贪心)
- hdu 1052 Tian Ji -- The Horse Racing(经典贪心)
- HDU-1052 Tian Ji -- The Horse Racing 贪心 考虑特殊位置(首尾元素)的讨论
- hdu 1052 Tian Ji -- The Horse Racing
- HDU 1052 - Tian Ji -- The Horse Racing(贪心)
- hdu 1052 Tian Ji -- The Horse Racing(贪心)
- 【贪心专题】HDU 1052 Tian Ji -- The Horse Racing (田忌赛马)
- HDU 1052 Tian Ji -- The Horse Racing(贪心)
- UVA 1344 - Tian Ji -- The Horse Racing(很好的贪心题)
- HDU 1052 Tian Ji -- The Horse Racing 贪心
- hdu 1052 Tian Ji -- The Horse Racing(贪心)
- HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】
- hdu 1052 Tian Ji -- The Horse Racing(贪心)
- HDU 1052 Tian Ji -- The Horse Racing(贪心)
- hdu 1052 Tian Ji -- The Horse Racing(贪心)
- HDU:1052 Tian Ji -- The Horse Racing(贪心)
- HDU 1052 Tian Ji -- The Horse Racing(贪心)(2004 Asia Regional Shanghai)
- HDU-1052-Tian Ji -- The Horse Racing(C++ && 简单贪心)