首页 > 代码库 > 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 }
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 }
2017-4-14:算法之路#2 (贪心、抽屉原理、计算几何)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。