LightOJ-1198-greedy

来源:互联网 发布:淘宝代销退货流程 编辑:程序博客网 时间:2024/05/01 16:10

题目大意:就是田忌赛马,赢了的2分,平了1分,输了0分,问最大问的多少分;

题目解析:首先肯定从小到大枚举自己的队员让他赢,并且赢得是惊险的(实力最接近),最关键的问题来了,什么时候该平呢?因为平局会影响后面的情况,平局肯定不如赢一局划算,所以先把平局不考虑,在考虑完了赢的情况下在遍历一遍又没有平的就可以了;

AC代码:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<map>using namespace std;map<int,int>ma;int main(){int cas,c,a[110],b[110],i,j,n;scanf("%d",&cas);for(c=1;c<=cas;c++){scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)scanf("%d",&b[i]);int ans=0,l=0,r=0;sort(a,a+n);sort(b,b+n);for(i=0;i<n;i++){for(j=n-1;j>=0;j--){if(b[j]==-1)continue;if(a[i]>b[j]){break;}}if(j==-1)continue;ans+=2;a[i]=b[j]=-1;}for(i=0;i<n;i++){if(a[i]==-1)continue;for(j=0;j<n;j++){if(b[j]==-1)continue;if(a[i]==b[j]){ans++;a[i]=b[j]=-1;break;}}}printf("Case %d: %d\n",c,ans);}return 0;}



0 0