2017-4-14:算法之路#2 (贪心、抽屉原理、计算几何)

A - 独木舟(贪心)

n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?

Input

第一行包含两个正整数n (0

Output

一行一个整数表示最少需要的独木舟数。

Sample Input

3 6

1

2

3

Sample Output

2

Solve:

贪心水题,每次只要拿最大的跟最小的组合比较就行了

Code:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 static const int MAXN = 1e4 + 10;
 5 LL n , m;
 6 LL data[MAXN] = {0};
 7 int main()
 8 {
 9     scanf("%lld%lld" , &n , &m);
10     for(int i = 0 ; i < n ; ++i)
11         scanf("%lld" , data + i);
12     sort(data , data + n);
13     int l = 0 , r = n - 1;
14     int ans = 0;
15     while(l <= r)
16     {
17         if(data[l] + data[r] <= m)
18             ++l;
19         --r , ++ans;
20     }
21     printf("%d\n" , ans);
22 }

B - 走格子(水题,模拟)

有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去。机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值。如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] < 0,走到这个格子需要消耗相应的能量,如果机器人的能量 < 0,就无法继续前进了。问机器人最少需要有多少初始能量,才能完成整个旅程。

例如:n = 5。{1,-2,-1,3,4} 最少需要2个初始能量,才能从1号走到5号格子。途中的能量变化如下3 1 0 3 7。

Input

第1行:1个数n,表示格子的数量。(1 <= n <= 50000) 第2 - n + 1行:每行1个数A[i],表示格子里的能量值(-1000000000 <= A[i] <= 1000000000)

Output

输出1个数,对应从1走到n最少需要多少初始能量。

Sample Input

5

1

-2

-1

3

4

Sample Output

2

Solve:

真水题,直接模拟就可以了

Code:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 int n;
 5 int main()
 6 {
 7     scanf("%d" , &n);
 8     LL oil = 0;LL ans = 0;LL x;
 9     for(int i = 0 ; i < n ; ++i)
10     {
11         scanf("%lld" , &x);
12         oil += x;
13         if(oil < 0)
14         {
15             ans += (-oil);
16             oil = 0;
17         }
18     }
19     printf("%lld\n" , ans);
20 }

时间: 2024-11-10 07:28:42

2017-4-14:算法之路#2 (贪心、抽屉原理、计算几何)的相关文章

华农oj Problem J: 幻化【贪心/抽屉原理】

Problem J: 幻化 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 18 Solved: 3 [Submit][Status][Web Board] Description 遇见你是我一世的春暖花开, 从此清风明月浩瀚星海. 不论结局,很高兴认识你. 她给了他一个长度为n的整数序列a[],他还给了她另外一个长度为n的整数序列b[],现在他想通过每次交换a[i],a[j]使序列a变成b,但是每次交换的代价是|j-i|. 请问最少的代价是多少呢?

python常用算法(6)——贪心算法,欧几里得算法

1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但是在某些问题上贪心算法的解就是最优解.要会判断一个问题能否用贪心算法来计算.贪心算法和其他算法比较有明显的区别,动态规划每次都是综合所有问题的子问题的解得到当前的最优解(全局最优解),而不是贪心地选择:回溯法是尝试选择一条路,如果选择错了的话可以“反悔”,也就是回过头来重新选择其他的试试. 1.1

前端小白的算法之路

时隔多日终于解决了埋在心头的一道难题,霎时云开雾散,今天把一路而来碰到的疑惑和心得都记录下来,也算是开启了自己探索算法的大门. 问题背景 曾经有一个年少轻狂的职场小白,在前端圈子里摸爬滚打将近两年,本计划在js的道路上越走越远,以至于每天沉浸在js红皮书里不能自拔,突然有一天脑抽想找leader比划两下,于是出现了下面的对话,小白:leader,您最近在干嘛?手里有需要亟待解决的难题吗?leader:咦,确实有哎,咱的项目随着业务的不断发展,日均PV也越来越多,公司的两台机器已经快满足不了需求,

算法导论——lec 13 贪心算法与图上算法

之前我们介绍了用动态规划的方法来解决一些最优化的问题.但对于有些最优化问题来说,用动态规划就是"高射炮打蚊子",采用一些更加简单有效的方法就可以解决.贪心算法就是其中之一.贪心算法是使所做的选择看起来是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解. 一. 活动选择问题 [问题]对几个互相竞争的活动进行调度:活动集合S = {a1, a2, ..., an},它们都要求以独占的方式使用某一公共资源(如教室),每个活动ai有一个开始时间si和结束时间fi ,且0 ≤ si &

51CTO论坛搜索升级,支持模糊查询 2017.6.14

51CTO论坛搜索进行升级,使用新搜索算法,支持模糊查询,更容易查找到相关帖子.目前的结果切换到so.51cto.com,欢迎大家体验.在论坛首页顶部搜索框搜索已经支持最新搜索技术,后续会在版块页.帖子页的搜索也使用新搜索技术.2017.6.14 过去的论坛搜索,是在论坛数据库搜索,一方面搜索需要等待时间长,点击一次才能进入,另一方面搜索不支持模糊查询,经常找不到搜索结果. 这次搜索的升级切换,也依然可能有问题,欢迎大家留言说说自己的体验和问题,后面我们还会继续优化搜索算法,提升搜索体验.

[1] 算法之路 - 选择排序

选择排序 – 算法 1. 将要排序的对象分作2部份,一个是已排序的,一个是未排序的 2.  从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个 e.g: 排序前:70 80 31 37 10 1 48 60 33 80 [1] 80 31 37 10 7048 60 33 80 选出最小值1 [1 10] 31 37 80 7048 60 33 80 选出最小值10 [1 10 31] 37 80 7048 60 33 80 选出最小值31 [1 10 31 33] 80 7048

[2] 算法之路 - 选择之堆排序

题目: 选择排序法的概念简单,每次从未排序部份选一最小值,插入已排序部份的后端,其时间主要花费于在整个未排序部份寻找最小值,如果能让搜寻最小值的方式加 快,选择排序法的速率也就可以加快 Heap排序法让搜寻的路径由树根至最后一个树叶,而不是整个未排序部份,从而可以加快排序的过程,因而称之为改良的选择排序法. 整个堆排序的过程分建堆.取值.调整为新的堆三个过程.分别如下示:(以最小堆积树为例.关于HeapTree请参阅数据结构与算法) 建堆 - 算法 1.  加至堆积树的元素会先放置在最后一个树叶

[3] 算法之路 - 插入排序

插入排序 – 算法 1.将排序部分分成两部分 2.每次从后面部分取最前面的数插入到前面部分的适当位置 该处提供两个插入排序版本,指定间隔插入与插入排序.后面对指定间隔排序提到Shell排序中的n/2间隔与Sedgewick间隔 例如: 排序前:92 77 67 8 6 84 55 85 43 67 [77 92] 67 8 6 8455 85 43 67 将77插入92前 [67 77 92] 8 6 8455 85 43 67 将67插入77前 [8 67 77 92] 6 8455 85 4

[4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔

题目 插入排序法由未排序的后半部前端取出一个值,插入已排序前半部的适当位置,概念简单但速度不快. 排序要加快的基本原则之一: 是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度,Shell排序法即是基于此一概念来改良插入排序法. 解法 Shell排序法最初是D.L Shell于1959所提出,假设要排序的元素有n个,则每次进行插入排序时并不是所有的元素同时进行时,而是取一段间隔. Shell排序算法 – n/2间隔 Shell首先将间隔设定为n/2,然后跳跃进行插入排序,再来将