1 简单的贪心(一)

第1题     礼物

国庆马上要到了。小明喜欢的礼物有n种分别是:公仔、电子手表、漫画书等。每种礼物有一件,每种礼物价钱都不一样。小明手头上有 m 元。小明最多可以买多少件礼物?

 

输入格式

第一行,两个整数:n m   1 <= n<=100,1<=m<= 100000。

第二行,n个空格分开的整数(每个整数<=1000),代表每种礼物的价钱。 

输出格式

一个整数,小明能买多少件礼物

输入/输出例子1

输入:

3 100

40 70 50 

输出:

2

#include<bits/stdc++.h>
using namespace std;
long long n,m,ans;
long long a[114514];
int main (){
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	cin>>a[i];
	sort(a+1,a+n+1);
	for (int i=1;i<=n;i++) {
		m -= a[i];
		if (m<0) {
			break;
		}
		ans++;
	}
	cout<<ans;
	return 0; 
} 

第2题     蜡烛

奶牛bessie有n根蜡烛,第i根蜡烛的长度是h[i]. bessie最近刚上完小学,只会加减法。它想知道它的n根蜡烛最多能用多少个晚上。由于bessie比较胆小,因此它第一个晚上只点燃一根蜡烛,第二个晚上点燃两根蜡烛,第三个晚上点燃三根蜡烛…第i个晚上它必须要点燃i根蜡烛。每根被点燃的蜡烛,它燃烧一个晚上会使得它的长度减少1。一旦蜡烛的长度变成0,那么该根蜡烛就用完了。如果第i个晚上bessie发现不够i根蜡烛用了,那么bessie就会睡不着。 Bessie想知道,它该如何选择每个晚上点燃哪些蜡烛,可以使得它的n根蜡烛能用尽量多的晚上。输出最多能用多少个晚上。

输入格式

第一行:一个整数n, 1 <= n <= 50.

第二行:n个整数,第i个整数表示第i根蜡烛的长度h[i]. 1 <= h[i] <= 100.

输出格式

一个整数,总共最多能用多少个晚上。

输入/输出例子1

输入:

3

2 2 2

输出:

3

#include<bits/stdc++.h>
using namespace std;
int a[105],n,m,ans,sum;
bool cmp(int x,int y){
    return x>y;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        sort(a+1,a+n+1,cmp);
        for(int j=1;j<=i;j++){
            if(a[j]<=0){
                cout<<i-1;
                return 0;
            }
            a[j]--;
        }
    }
    cout<<n;
    return 0;
}

第3题     数字圈

当我们写数字时会发现有些数字有封闭区域, 有的数字没有封闭区域。 数字 0 有一个封闭区域, 数字 1、 2、3 都没有封闭区域, 数字 4 有一个封闭区域, 数字 5 没有封闭区域, 数字 6 有一个封闭区域, 数字 7 没有

封闭区域, 数字 8 有两个封闭区域, 数字 9 有一个封闭区域。

现在你要构造一个最小的非负整数, 使得它的各位数字的封闭区域的数量加起来的总和恰好等于 K。

 

输入格式

一个整数 K。 1 <= K <= 2500。

输出格式

满足题意的最小的非负整数。

输入/输出例子1

输入:

1

输出:

0

输入/输出例子2

输入:

2

输出:

8

输入/输出例子3

输入:

40

输出:

88888888888888888888

#include<bits/stdc++.h>
using namespace std;
long long k;
int main(){
    cin>>k;
    if (k==1) 
    {
        cout<<0;
        return 0;
    }
    for (int i=1;i<=k%2;i++)
        cout<<4;
    for (int i=1;i<=k/2;i++)
        cout<<8;
    
    return 0;
}

第4题     书架

为了方便同学们查阅资料,程序设计兴趣小组的辅导老师打算将积攒了很多年的n本书放到上课教室的书架上去。

教室的书架是一层一层叠起来的,每一层最多可以放m本书。每一层的高度由放在这层中最高的那本书决定的,如果不放书,则认为这层的高度为0。为了使每个同学能方便地拿到想要的书,书架的总高度应尽可能低。请编程计算将这n本书放在书架上后书架的最小总高度,计算的过程中不考虑书的厚度与书架本身材料的厚度。

输入格式

输入共n+1行。

第1行2个整数n和m (1≤m≤n≤100000) 。

接下来n行,每行1个正整数,分别表示每本书的高度(每本书的高度不超过100)。

输出格式

输出共1行,表示将n本书放入书架后书架的最小总高度。

输入/输出例子1

输入:

3 2

20 10 30

输出:

40

#include<bits/stdc++.h>
using namespace std;
bool cmp(int x,int y)
{
    return x>y;
}
int n,m,a[1000000],s=0;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i+=m)
        s+=a[i];
    cout<<s;
    return 0;
}

第5题     最大步数

给出了两个非负整数 P 和 Q。您的任务是使得 P 和 Q 相等。在每一步中,您可以执行以

下两项操作之一:

1、将任何质数加到 P 上。

2、从 Q 减去任何质数。

如果不可能使 P 和 Q 相等,则输出-1。否则,输出一个非负整数:可以执行的最大步数。

输入格式

一行,两个整数 P 和 Q。 0 <= P,Q <= 10^18

输出格式

一个整数

输入/输出例子1

输入:

5 9

输出:

2

输入/输出例子2

输入:

5 10

输出:

2

输入/输出例子3

输入:

5 6

输出:

-1

#include<bits/stdc++.h>
using namespace std;
long long p,q;
int main(){
	cin>>p>>q;
	if (p>q || q-p==1) cout<<-1;
	else cout<<(q-p)/2;
	return 0;
}

第6题     购书

书店稿促销优惠活动:“买 3 本免费 1 本”。即如果你买 3 本书,价格最便宜的那本书就不收钱。如果买很多书, 不同分组优惠的价格可能不同。比如,买 7 本书,价格分别是:10,3,2,4,6,4,9。 如果分组是: (10,3,2),(4,6,4)和(9),第一组免费价格 2,第二组免费价格 4,第三组不能免费。

现在,你买了 N 本书,请恰当分组(每组 1 本到 3 本),使得花费最少?

输入格式

第一行包含 1 个整数 N, 1≤N≤100000。

下面 N 行,每行 1 个整数 Ci 表示一本书的价格。 1≤ Ci ≤ 100000。

输出格式

一个整数,最少付款是多少。

输入/输出例子1

输入:

4  

3 2 3 2

输出:

8

输入/输出例子2

输入:

6

6 4 5 5 5 5

输出:

21

#include<bits/stdc++.h>
using namespace std;
long long n,ans;
long long price[114514];
bool cmp(long long x,long long y) {
	return x>y;
}
int main(){
	cin>>n;
	for (int i=1;i<=n;i++) {
		cin>>price[i];
		ans += price[i];
	}
	sort(price+1,price+n+1,cmp);
	for (int i=3;i<=n;i+=3) {
		ans -= price[i];
	}
	cout<<ans;
	return 0;
}

第7题     学生分组

有N组学生,给出初始时每组中的学生个数,再给出每组学生人数的上界R和下界L(L<=R),每次你可以在某组中选出一个学生把他安排到另外一组中,问最少要多少次才可以使N组学生的人数都在[L,R]中。

输入格式

第一行一个整数N,表示学生组数; n<=100

第二行N个整数,表示每组的学生个数;<=100

第三行两个整数 L,R,表示下界和上界

输出格式

一个数,表示最少的交换次数,如果不能满足题目条件输出-1

输入/输出例子1

输入:

2

10 20

10 15

输出:

5

#include<bits/stdc++.h>
using namespace std;
long long n,s,l,r,L,R,ans;
long long a[105];
int main(){
	cin>>n;
	for (int i=1;i<=n;i++) {
		cin>>a[i];
		s += a[i];
	}
	cin>>l>>r;
	if (s>r*n || s<l*n) {
		cout<<-1;
		return 0;
	}
	for (int i=1;i<=n;i++) {
		if (a[i]<l) {
			L += l-a[i];
		}
		if (a[i]>r) {
			R += a[i]-r;
		}
	}
	ans = max(L,R);
	cout<<ans;
	return 0;
}

第8题     渡河

总共有 X 人要坐船过河。

一个小船最多可以坐 4 人,一个小船固定收费 32 元。

一个大船最多可以坐 6 人,一个大船固定收费 36 元。

码头有无穷多小船和大船。问如何坐船,才能使得总费用最小。

输入格式

一个整数 X。

输出格式

一个整数,表示最小的总费用。

输入/输出例子1

输入:

4

输出:

32

输入/输出例子2

输入:

12

输出:

72

样例解释

60%的数据, 1 <= X <= 1000

80%的数据, 1 <= X <= 1000000

100 的数据, 1 <= X <= 2000000000

#include<bits/stdc++.h>
using namespace std;
long long x,s=0,ans;
int main(){
	cin>>x;
	ans = x/6*36;
	if (x<=4) cout<<32;
	else {
		if (x%6==1 || x%6==2)  ans = ans-36+32*2;
		if (x%6==3 || x%6==4) ans += 32;
		if (x%6==5) ans += 36;
		cout<<ans;
	}
	return 0;
}

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文档管理精灵-电子书架 功能简介 相信朋友你的各种各样的文档资料也不少吧,面对一大堆的资料,如何去管理它?如何很快地从自己的一大堆资料中找出需要的主题内容?不用愁,有了电子书架,一切的烦恼都会离你而去。言归正传,就让我们来看看她是一个什么样的一个东东吧。 适合对象 电子书架用于文档管理,所以适合于以下人员:网上";;;拾贝者";;;截取保存网上信息、文秘工作者管理重要档案、新闻媒体工作者保存书面信息、能进行计算机操作的学生作笔记、教师备课、各种科技人员撰写保存论文、游戏攻略收集者、炒股人员保存股市信息...等等...以及各种需要进行文档管理的信息工作者;但由于电子书架的特殊功用,所以又适合于以下人员:程序员、网站站长管理制作网页、机密档案管理员。 功能特点 电子书架的功能特点是:快速的资料截取、迅捷的资料查找、清晰的资料管理、丰富的格式转换、方便的电子书制作、安全的资料保存、多用户支持、Delphi及VB代码文本格式化等等,具体功能特点如下: 资料即取即存 电子书架为您收集资料预备了一个很实用的功能,就是";;;即取即存";;;,您所要做的仅仅是";;;复制";;;,操作就是这么简单。您只要开启电子书架,点一下菜单[工具]->[监视剪贴板],或者就按F7,好了,你在任何地方复制或剪切的资料都会被电子书架所收集并保存,并智能建立标题,不管你复制的是纯文本、漂亮的RTF格式文本、还是HTML网页,电子书架都为你忠实地保存下来。当然你也可以在这几种格式之间转化切换。你只要看到什么有用就复制一下,电子书架会自动为你保存,不用麻烦您高贵的手再去粘贴,避免了Windows常规操作时又复制又粘贴地频繁在各窗口间切换的烦琐,非常方便于您截取有价值的资料。你如果把电子书架最小化了(可以隐藏于系统栏),那么就更酷了,打个比方,电子书架就象是你办公室里灵巧的小秘,你只要复制你所要的,她就会把你的内容接管过去保存起来。 资料迅速查找 可以查标题、可以查内容;可以精确查找、可以模糊查找;可以逐个查找、可以批量查找;可以在当前目录位置查找、也可以在全库中搜索。与此同时,为了更方便迅速地找到需要的文档,电子书架为你设置了20个书签,使您能在常要查找的目录之间迅速跳转; 资料交流 电子书架内置了Email功能,您可以随时将资料库中的内容E-Mail给您的朋友,也可以带上附件;设有好友通讯录; 网址收藏 无论您在哪里复制一下网址,Collector就会问你要不要保存这个网址,并保存为HTML格式,建立链接。当然,您如果认为这个讨厌,您也可以关闭这个功能(只要不监视就可以了); IE安全恢复 在网上取一些资料时,鉴于有个别网站为了打响自己,私自修改用户Internet Explorer默认页及标题设置,并锁定注册表、禁用默认页修改,开机自动进入其网站。在电子书架中增加了IE安全恢复的功能,如果您的Internet Explorer已经被修改,可以用恢复功能恢复到默认设置(其实是三脚猫功夫,只不过是修改注册表而已); 多格式支持 电子书架支持的TXT、RTF、HTML等多种格式,所以,可以根据个人需要变化多样,非常漂亮。参见:《附录》-《电子书架范本》中的示例效果; 多格式间转换 可以在电子书架支持的TXT、RTF、HTML等格式之间编辑及相互转化,具备批量文件格式转化功能,您可以批量转换磁盘上的文件,可作为HTML自动生成、文本格式转换、小型Internet浏览工具;同时您也可以调用外部的任何一个文本编辑器(如WordPad、Microsoft Word)、网页编辑程序来对文档或者网页进行编辑,调用Microsoft Word方便您插入各种字符和表格(表格插入功能不完善);RTF-HTML转换功能,可以把存在于电子书架中的资料导出为HTML文件,导出后格式不会丢失; 编码转换 支持在BIG5和GB之间、DOS、UNIX之间相互转化,也可作为一个码制转换工具使用; 资料导入 支持鼠标拖放导入操作,您可以把文件或者文件夹拖入到电子书架内,文件或者文件夹的内容就会按照您的设置被导入,导入时智能判断BIG、HTML格式; 资料导出、电子书制作、批量网页制作 您存放在电子书架内的资料可以方便地导出为TXT纯文本文件、RTF多格式文档、HTML网页文件、Windows帮助格式的CHM文件、甚至CHM工程文件组。可以批量导出,导出生成的HTML文件自动建立索引页。这个功能使得电子书架将来有可能成为电子书制作、批量网页制作、批量文件生成的一个好工具; 光碟目录管理 这一个功能实在简陋,没有什么特色。功能是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值