思路:
每次用最长的砖,累加的长度超过窟窿的长度就算成功,输出用了的砖数;如果用完所有的砖后,累加的长度仍未达到窟窿的长度则输出“impossible”。
解答:
/*
《算法笔记》codeup 100000584 问题 D: Repair the Wall
*/
#include <cstdio>
#include <algorithm>
using namespace std;
int cmp(int a, int b) {
return a > b;
}
int main() {
int crack_length, bricks_num;
while(scanf("%d %d", &crack_length, &bricks_num) != EOF) {
int bricks_length[bricks_num + 1];
bricks_length[0] = 0x7fffffff; // 0位元素弃置,将其设为最大使其在sort后仍留在原地
for(int i = 1; i <= bricks_num; i++) {
scanf("%d", &bricks_length[i]);
}
sort(bricks_length, bricks_length + bricks_num, cmp);
int temp_length = 0;
for(int i = 1; i <= bricks_num; i++) {
temp_length += bricks_length[i];
if(temp_length >= crack_length) {
printf("%d\n", i);
break;
}
if(i == bricks_num)
printf("impossible\n");
}
}
return 0;
}
坑:
vscode提示"expected unqualified-id before numeric constant",检查后发现是由于我想从bricks_length的第二个元素开始排序,于是将sort的第一个参数写为"bricks_length + 1"导致的。将bricks_length[0]设为无穷大就能从第一个元素开始排序且不影响后续代码。
1756

被折叠的 条评论
为什么被折叠?



