UESTC1263(贪心)

<span style="color: inherit; line-height: 1.1; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">The Desire of Asuna</span>

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

ZYHAzwraith用自己心爱的键盘换来了很多支漂亮的荧光棒!

一天,他准备用一条由很多个莹光圈相互连接而成的荧光链送给女神Asuna。每个荧光圈只能由一支荧光棒首尾相接成一个环得到。现在他手中有  n  条荧光链,为了最后把这些链拼接成一条链,每次他可以选择任意一条荧光链中的任意一个荧光圈并用魔法把这个圈断开,然后用这个断开的荧光圈去连接任意两条荧光链使之成为一条。

现在ZYHAzwraith想知道最少需要多少次才能把这些荧光链链拼接成一条长链?

Input

第一行是一个整数  n  (  1n2000 ), 表示有  n  条荧光链。 接下来一行有  n  个数,每个数  ai  ( 1ai105 )表示第  i  条链由  ai  个荧光圈相互连接

Output

输出一个整数表示最少的次数。

Sample input and output

Sample Input Sample Output
3
3 2 1
1
3
4 3 4  
2

Hint

第一组样例解释: title

Source

第七届ACM趣味程序设计竞赛第三场(正式赛)
噗~现在明白啦,比赛时卡的要命;贴个代码
//UESTC-1263(贪心)
//有n条由荧光圈构成的荧光链,输入每个荧光链的荧光圈数,现在要将这n个链连成一条链。
//每次他可以选择任意一条荧光链中的任意一个荧光圈并用魔法把这个圈断开,
//然后用这个断开的荧光圈去连接任意两条荧光链使之成为一条。问最少需要断开多少个荧光圈,才能将其连成一条链。
//贪心题,假如用a[i]表示第i条链的荧光圈数,首先将n个数按升序排列。从最小的链开始,每次从a[i]中断开一个圈,这时若
//a[i]==1那么连接任意两个链后n=n-2;否则由于断开a[i]的一个圈后,a[i]还剩a[i]-1个圈。相当于减少了两个链又增加了一条。
//所以此次后n=n-1; 可知当连的n==1或n==2时就可以退出循环直接输出了。 
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[2001];
int main()
{
	int i,j,k,n;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		sort(a,a+n);      //从小到大排序 
		k=0,i=0;
		while(n)
		{
			for(j=a[i];j>0;j--)
			{
				if(n<=2)  break;   //当圈数连的小于等于2时;直接可以跳出循环。 
				if(a[i]==1) 
				  n-=2;      //当a[i]==1或a[i]还剩的等于1时;可以消去两个圈。 
				else 
				{
				   n-=1;    //否则消去一个圈 
				   a[i]--;  //链a[i]剩余的圈数 
				}
				k++;        //记录断的圈数 
			} 
			if(n==2)
			{
			   k++; break;	//当还剩两部分时,加1后退出 
			}
			else if(n==1)
			 break;         //否则直接退出。 
		}
	printf("%d\n",k);      //打印出最少断圈数。 
	}
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
互联网络程序设计是指在互联网上进行程序开发和设计的过程。UESTC则是我国的一所著名高校——电子科技大学。 互联网络程序设计 uestc包含了两个主要的方面:互联网络和程序设计。互联网络是指将多个计算机网络通过通信链路互相连接起来,实现信息共享和资源共享的网络系统。程序设计是指根据需求和目标,通过编写代码和设计算法,实现计算机程序的过程。 互联网络程序设计 uestc的学习内容主要包括以下几个方面: 1. 网络知识:学习互联网络的基本概念、原理和协议,如TCP/IP协议、HTTP协议等。掌握网络编程的基本技术,能够编写网络应用程序。 2. 数据通信:学习数据通信的基本原理和技术,包括数据传输的方式、数据压缩和加密等。了解网络安全和数据保护的基本知识。 3. 程序设计:学习编程语言和开发工具,如Java、C++和Python等。掌握常用的编程技巧和方法,能够设计和实现复杂的网络应用程序。 4. Web开发:学习Web开发的基本知识和技术,包括HTML、CSS、JavaScript等。能够设计和实现交互式的Web应用程序。 5. 数据库技术:学习数据库的基本原理和技术,如SQL语言和数据库管理系统。能够设计和管理数据库,实现数据的存储和检索。 通过学习互联网络程序设计 uestc,可以掌握互联网应用开发的基本技能,具备设计和实现网络应用程序的能力。这对于目前互联网行业的人才需求来说是非常重要的,也为学生提供了广阔的就业和创业机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bokzmm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值