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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
View Code

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 }
View Code

 

以上是关于2017-4-14:算法之路#2 (贪心抽屉原理计算几何)的主要内容,如果未能解决你的问题,请参考以下文章

背包问题看贪心算法原理

算法入门三——选择排序算法

贪心算法问题-LeetCode 5545(贪心算法,跳跃问题)

会场安排问题(贪心算法)

贪心算法原理

51nod 1103 N的倍数(抽屉原理)