【2018/09/08测试T1】【WOJ 3931】eat

【题目】

【分析】

看到题描是不是觉得特别吓人

其实这就是一道简单的签到题

扫描二维码关注公众号,回复: 3092780 查看本文章

这道题和图论没有太大关系,我们只要知道它是一个连通图就行了

我们按照每个城市的人数从大到小排序,每次都选出没选过的最大人数的城市,加进答案

由于每晚每个城市都会有 1 个人去乡下,所以第二天的答案减 1,第三天的答案减 1 再减 2,以此类推

最后在这些答案之中选出最大的就行了

【代码】

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 200005
using namespace std;
int a[N];
bool comp(int x,int y)
{
	return x>y;
}
int main()
{
//	freopen("eat.in","r",stdin);
//	freopen("eat.out","w",stdout);
	int n,m,i,x,y;
	long long sum,num,maxn;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)  scanf("%d",&a[i]);
	//for(i=1;i<=m;++i)  scanf("%d%d",&x,&y);
	sort(a+1,a+n+1,comp);
	sum=0,num=0,maxn=0;
	for(i=1;i<=n;++i)
	{
		num+=i-1;
		sum+=a[i];
		maxn=max(maxn,sum-num);
	}
	printf("%lld",maxn);
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/forever_dreams/article/details/82528757