您的位置:首页 > 其它

ZOJ 3058 The War(简单贪心)

2014-02-07 12:08 323 查看
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4351

题目大意:有N个士兵,每个士兵所能拿动的武器为【minWi, maxWi】,为了能打胜战,要尽可能多的拿到武器。问你如何能拿到更多。

其实这题和那个活动时间安排极其相似。比较简单,排序就好了。

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;

typedef struct str{
int minx;
int maxx;
}str;

str st[2510];
int N, M, W;
int A[40010];
bool B[40010];

bool cmp(str A, str B)
{
if(A.maxx==B.maxx)
return A.minx<B.minx;
return A.maxx<B.maxx;
}

int main(void)
{
int i,j;
while(-1!=scanf("%d %d", &N, &M))
{
int cnt=0;
for(i=0; i<N; ++i)
scanf("%d %d", &st[i].minx, &st[i].maxx);
for(i=0; i<M; ++i)
scanf("%d", &A[i]);
sort(st, st+N, cmp);
sort(A, A+M);
memset(B, false, sizeof(B));
for(i=0; i<N; ++i)
{
for(j=0; j<M; ++j)
{
if(!B[j] &&A[j]>=st[i].minx && st[i].maxx>=A[j])
break;
}
if(j==M)
continue;
B[j]=true;
++cnt;
}
printf("%d\n", cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: