我脑袋也转不过来为什么要加一才能过,可爱的代码

P2676 [USACO07DEC] Bookshelf B

@[elong123](/user/892700) 因为要叠的高度超过$S$才行,而您的解法会比$S$低,所以要加一才能超过$S$ Ps:另外由此可见您代码不是很严谨,严谨一点可以考虑加个特判判断一下是否加一
by Coffins @ 2023-03-09 21:09:57


@[Coffins](/user/615965) 大佬能否指点一下,让我见见你的代码,因为我也是刚开始学习排序,还有很多地方不懂
by elong123 @ 2023-03-10 20:30:17


@[elong123](/user/892700) 其实您的排序没毛病,就是统计方式与想象有出入(当然也是对的 举个栗子: 当h分别为1 20 50 60 100, s为170时,您的代码在统计进100和60时sum会加加,当cnt加上50时就超了,因此sum=2,但实际上只用100和60是不够的,还要用50却没统计上,所以最后结果要加一 另外就是循环结束后特判若cnt==b则不加1,因为正好卡上了,够高了
by Coffins @ 2023-03-10 22:25:43


您这么改不用加1: for(int i=0;cnt<=b;i++) { cnt+=a[i]; sum++; }
by liujiayao @ 2023-03-13 11:04:32


```cpp #include<bits/stdc++.h> #include<algorithm> using namespace std; int main(){ int n,b; // int h[20000];//奶牛的身高 cin>>n>>b; int s=0; for(int i=0;i<n;i++){ cin>>h[i]; } sort(h,h+n,greater<int>());//倒序排序 int j=0; for(j=0;j<n;j++){ s=s+h[j]; if(s>=b){ break; } } cout<<j+1; return 0; } ```
by zhangboyuan0 @ 2023-03-25 09:37:20


|