首页 > 代码库 > 2017-4-14:算法之路#2 (贪心、抽屉原理、计算几何)

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 (贪心、抽屉原理、计算几何)