文章
5
粉丝
87
获赞
16
访问
1.1k
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,w,a[1000];
cin>>n>>w;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int tag=0,sum=0;
for(int i=0;i<n;i++){
if((sum+a[i])>=w){
sum=0;
tag++;
}else{
sum+=a[i];
}
}
if(sum!=0) tag++;
cout<<tag;
return 0;
}
通过率0%,麻烦看下错在哪里
登录后发布评论
代码存在逻辑错误,主要问题在于判断每次搬运物品总重量是否超过最大承重 w 时出现了条件判断失误。代码中使用 (sum + a[i]) >= w 作为判断条件,这样当 sum + a[i] 恰好等于 w 时,当前物品 a[i] 就不会被算入本次搬运,而是会被错误地分到下一次搬运,从而导致搬运次数计算错误。正确的判断条件应该是 (sum + a[i]) > w,即只有当加上当前物品后总重量严格超过最大承重时,才开始新的一次搬运。
代码修改如下: