洛谷找最小值c语言,洛谷 P1478 陶陶摘苹果(升级版) C语言实现

原题地址:P1478 淘淘摘苹果(升级版)- 洛谷

题目描述

又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次她有一个a公分的椅子。当他手够不着时,他会站到椅子上再试试。

这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力气只剩下s了。当然,每次摘苹果时都要用一定的力气。陶陶想知道在s<0之前最多能摘到多少个苹果。

现在已知n个苹果到达地上的高度xi,椅子的高度a,陶陶手伸直的最大长度b,陶陶所剩的力气s,陶陶摘一个苹果需要的力气yi,求陶陶最多能摘到多少个苹果。

输入输出格式

输入格式:

第1行:两个数 苹果数n,力气s。

第2行:两个数 椅子的高度a,陶陶手伸直的最大长度b。

第3行~第3+n-1行:每行两个数 苹果高度xi,摘这个苹果需要的力气yi。

输出格式:

只有一个整数,表示陶陶最多能摘到的苹果数。

输入输出样例

输入样例#1:

输出样例#1:

8 15

20 130

120 3

150 2

110 7

180 1

50 8

200 0

140 3

120 2

4

说明

所有数据:n<=5000 a<=50 b<=200 s<=1000

xi<=280 yi<=100

思路

咳,首先由于前几天刚刚学了什么是“深度优先搜索(DFS)”,看到这道题,我第一反应是:这个不就是用深度优先搜索吗?!把所有情况全部列举出来,然后再在满足条件的情况下选择能摘到最多苹果的情况,不就AC了吗?!

自我感觉非常良好,还自以为很聪明。我还在输入的时候就把摘不到的苹果忽略了,以此来减少列举情况,节约时间。

于是写了这样的代码:

代码

#include

void dfs(int s, int num);

int apple[5005], book[5005];

int max = 0, n, t = 0;

int main()

{

int s, a, b, i, max1, xi;

scanf("%d%d%d%d", &n, &s, &a, &b);

max1 = a + b;

for(i = 0; i < n; i++)

{

scanf("%d", &xi);

if(xi <= max1)

{

scanf("%d", &apple[t]);

t++;

}

else

scanf("%d", &xi);

}

dfs(s, 0);

printf("%d", max);

return 0;

}

void dfs(int s, int num)

{

int i;

if(s <= 0 || num == t)

{

if(s < 0)

num--;

if(num > max)

max = num;

return;

}

for(i = 0; i < t; i++)

{

if(book[i] == 0)

{

book[i] = 1;

dfs(s - apple[i], num + 1);

book[i] = 0;

}

}

return;

}

最后的结果当然AC了 ,好吧…TLE了…感觉瞬间自己被自己打脸。

然后再次经过不断思考发现,只要将可以摘到的苹果用“快速排序”将要用的力气从小到大排序出来,然后从最小的力气一直累加,直到累加值>=淘淘拥有的力气,这时候就可以得到摘到最多苹果的值了。

ps.这时候要注意,苹果为0的情况。和累加是大于力气,还是等于力气,这两种不同情况的时候要对值做不同的处理。

所以最终获得AC了!我果然是天才!

AC代码

#include

void quicksort(int left, int right);

int apple[5005];

int main()

{

int s, n, a, b, i, t = 0, max1, xi, sum = 0;

scanf("%d%d%d%d", &n, &s, &a, &b);

max1 = a + b;

for(i = 0; i < n; i++)

{

scanf("%d", &xi);

if(xi <= max1)

{

scanf("%d", &apple[t]);

t++;

}

else

scanf("%d", &xi);

}

if(n == 0)

{

printf("0");

return 0;

}

quicksort(0, t - 1);

for(i = 0; i < t; i++)

{

sum += apple[i];

if(sum == s)

{

printf("%d", i + 1);

return 0;

}

else if(sum > s)

{

printf("%d", i);

return 0;

}

}

return 0;

}

void quicksort(int left, int right)

{

int i, j, temp, t;

if(left > right)

return;

temp = apple[left], i = left, j = right;

while(i != j)

{

while(apple[j] >= temp && i < j)

j--;

while(apple[i] <= temp && i < j)

i++;

if(i < j)

{

t = apple[i];

apple[i] = apple[j];

apple[j] = t;

}

}

apple[left] = apple[i];

apple[i] = temp;

quicksort(left, i - 1);

quicksort(i + 1, right);

}

最后的体会是:做题不能想当然,要思考用最快的方法,而不是用自己感觉很厉害的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程 结对编程 (II) 电梯调度 算法和测试框架

[很多同学完成了上一个结对编程项目后, 很想知道下一个项目是什么, 我们这次要练习如何设计 接口, 测试框架, 和算法. ] [博客园的朋友们也可以试一试怎么高效地解决这个问题] 现代软件工程系列 结对编程 (II) 电梯调度程序 ------- Pair Project II Elevator Scheduler D…

c语言入门自学为什么要用,为什么要将C语言作为入门语言?

编程是向计算机发出指令以执行特定任务或执行指令的行为&#xff0c;目前专业行业和学术界使用数百种编程语言。一个人需要熟悉并且能够使用至少几种编程语言进行编程才能作为目前专业开发者的成功。学习编程的最好理由在于它对所有人开放&#xff0c;你不需要大学学位即可通过…

c语言case接收字符,switch-case-break:字符释义 | 新思维:C语言程序设计

【问题&#xff1a;字符解释】从键盘输入一个字符&#xff0c;当输入的字符为“y”或“n”或“c”时&#xff0c;分别显示“Yes”、“No”、“Cancel”&#xff0c;输入其他字符时显示“Illegal!”。#include int main(int argc, char *argv[]){char cgetchar();switch(c) {cas…

现代软件工程讲义 如何提出靠谱的项目建议

互联网时代对于创新者来说, 既是一个伟大的时代, 又是一个糟糕的时代。 你有很多机会做出影响世界的产品, 但是, 似乎任何想法都被别人想到过了, 做出来了, 上市了, 移植到各种平台上去了… 那么我们后来人除了羡慕别人生得早, 还有什么机会呢? 但是往往不经意间, 在同学们…

现代软件工程 教学计划 中国科学技术大学-微软亚洲研究院联合培养班

屈指一算, 我已经讲了3年 <现代软件工程>, 教了 4 个班。 2007 - 2009 清华大学理论计算机科学研究中心 (姚班) 2009 北航计算机系还有在北大合作的教学: 2007 - 2009 北京大学软件学院 (课程名叫 - 微软软件实现技术, 我是讲师之一) …

c语言程序设计主编张玉生教材答案,清华大学出版社-图书详情-《Visual Basic程序设计实验指导》...

前言Visual Basic程序设计实验指导本书是《Visual Basic 程序设计教程》的配套实验指导书&#xff0c;全书内容分为四部分。第1部分为实验指导&#xff0c;设计了18个实验&#xff0c;每个实验都是编者精心设计和选择的&#xff0c;所构思的实验内容选材合理&#xff0c;实验目…

基础知识很扎实 - 但是面试就是做不出来, 怎么办? (长, 慎入)

http://www.newsmth.net/bbstcon.php?boardMicrosoft&gid48785 有人提问: 看了很多的面试题之类的&#xff0c;感觉虽然自己数据结构与算法基础知识很扎实&#xff0c;但还是做不出来&#xff0c;所以请高人指点。 这个问题看似迷惑, 其实提问的人搞混了两件事 - “数据…

c语言中的for循环怎么提前终止,[新人求指教]51C语言编程可否用中断令循环结束提早结束...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼C51_C语言编程控制流水灯硬件电路 p0 接 led 8 个&#xff0c;P33 接按键使用中断2开机灯按1~8逐位闪烁&#xff0c;并循环按键后改为 两灯亮 的流水灯下面写了个程序#include #include #define uchar unsigned char#define uint u…

湖南工程学院+c语言程序设计人事档案管理系统,程序设计人事档案管理系统.doc...

课 程 设 计 报 告课程名称 C语言程序设计课题名称 人事档案管理系统专 业 电子信息班 级 1001班学 号 201001030112姓 名指导教师 肖伟平 黄哲 罗敬2011年 6 月 23 日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设计课 题 人事档案管理系统专业班级 电子信息1001班学…

敏捷软件开发宣言ndash;Manifesto for Agile Software Development

敏捷开发, 谁不会呀, 不就是 没文档, 出活快, 用户说啥都能改?下面是一个笑话, 王屋村的大牛说 - 我最近转手接了一个活, 完事能挣四五万, 我拿过图纸一看, 不就是盖一烟囱吗? 我们是敏捷 (Agile) 的团队&#xff0c;要文档作甚? 马上开始干活&#xff01;都快盖好了&…

2015电大c语言,2015电大本科C语言程序设计A试题汇总.doc

2015电大本科C语言程序设计A试题汇总2015年电大本科《C语言程序设计A》一、单选题1&#xff0e;在每个C语言程序中都必须包含有这样一个函数&#xff0c;该函数的函数名为 A 。A. main B. MAIN C. name D. function 2&#xff0e;每个C语言程序文件的编译错误分为(B)类。 A. 1 …

现代软件工程 - 代码量等于树叶量

我 2008年在清华大学上<现代软件工程> 的时候, 和同学讨论了代码量的问题。 同学说&#xff0c;许多相似课程都有“代码量”的要求&#xff0c;就是说软件工程的项目选题如果没有到一定量的代码&#xff0c;就不能算合格的选题。 老师助教专门花时间分析学生的代码是否…

计算机二级考试c语言公共基础知识,全国计算机二级c语言公共基础知识考试内容.doc...

全国计算机二级c语言公共基础知识考试内容全国计算机二级等级考试的笔试包括基础知识和程序设计两部分&#xff0c;其中基础知识占30分。以下是由关于全国计算机二级c语言公共基础知识考试内容的内容&#xff0c;希望大家喜欢!全国计算机二级c语言公共基础知识考试内容一、C语言…

现代软件工程 其实还是人的问题

在《现代软件工程》这门课程上&#xff0c;大家分成6-7人的小组进行项目开发&#xff0c;有项目经理 (PM)&#xff0c;有开发人员 (dev)&#xff0c;测试人员 (test) 等。不久就有PM说&#xff0c;怎么小组里有些人就是不干活&#xff1f; 最早&#xff0c;大家假设所有人都是…

现代软件工程系列 结对编程 (II) 电梯调度程序新需求

原来布置的作业在这里: http://www.cnblogs.com/xinz/archive/2010/11/28/1890300.html 正如在现实生活中一样, 软件项目的需求也会经常发生变化. 原题假设所有电梯都停靠所有楼层, 我们改成各个电梯停靠的楼层不尽相同。这在实际生活中也很常见。 例如原来: Elevator name…

nodejs怎么与c语言通信费是什么,NodeJS介绍与使用

NodeJS是什么Node.js是一个基于Chrome V8引擎的JavaScript运行时。NodeJS并不是一门语言&#xff0c;JavaScript才是一门语言&#xff0c;他是一个运行时&#xff0c;如果想要在服务器端运行就需要运行时。nodeJS使用了一个事件驱动、非阻塞式I/O的模型非阻塞式I/OI/O:就是inpu…

历年高考报考人数和录取人数

全国历年参加高考人数和录取人数统计 (1977年&#xff5e;2010年) 时间&#xff08;年&#xff09;参加高考人数&#xff08;万人&#xff09;录取人数 &#xff08;万人&#xff09;录取率 &#xff08;%&#xff09;1977570274.7%197861040.26.6%1979468286.0%1980333288.4%1…

android xml配置,Android XML设置z-Index

基本上我有2个线性布局。用户单击按钮时&#xff0c;一个线性布局将展开或折叠。另一个将始终显示在顶部。这里是我的xml&#xff1a;Android XML设置z-Indexandroid:layout_width"fill_parent"android:layout_height"fill_parent" >android:id"id…

现代软件工程 M1 博客要求

各个小组都大致确定了自己的项目和人员分工, 这太好了。 第一个里程碑马上就要开始了。 请同学们按照下表的要求, 把各个角色, 各个阶段要做的事情都快速地用博客表达出来吧。 每个博客的截止日期是: 每日博客:第二天早上9点。 每周博客:下一周周一早上9点。 每个团队有6-7 …

android音乐进度条设计代码,【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等...

作者&#xff1a;程序员小冰&#xff0c;GitHub主页&#xff1a;https://github.com/QQ986945193新浪微博&#xff1a;http://weibo.com/mcxiaobing首先给大家看一下我们今天这个最终实现的效果图&#xff1a;当然&#xff0c;这里的进度&#xff0c;是我们手动触摸控制的。截图…