题目描述
共n个罪犯排成一排,第i个人智商为xi,现在需要将他们依次分组押运,每一组只可以安排相邻的若干个罪犯。为防止高智商罪犯联合逃脱,必须保证每一组的智商总和不超过m,求最少要分几组?如果无法完成要求输出0。
输入输出格式
输入格式
输入文件criminal.in
输入第一行为正整数n和m,第二行为n个正整数xi。n<=100,m<=1000,xi<=500
输出格式
输出文件criminal.out
输出一个整数。
输入输出样例
输入样例
5 300
250 150 60 100 90
输出样例
3
首先分析题目,你看到这种题目,首先要想到……
为什么高智商还要去犯罪
这是道贪心问题
那没,什么时候会触发cout<<"0"呢???
那就是当单人的智商就大于了最高承载量。
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=0;i<n;i++)
if(w[i]>a){
cout<<"0"<<endl;
return 0;
}
w[ ]就是储存所有爱因斯坦犯罪的智商
呐麽,后面就运用简简单单的贪心算法的标准步骤就可以了。
完结!撒花!!!
忘了代码了
#include<bits/stdc++.h>
using namespace std;
const int N=109;
int w[N];
int main(){
freopen("criminal.in","r",stdin);
freopen("criminal.out","w",stdout);
unsigned long long n,a,ans=1,sum=0;
cin>>n>>a;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=0;i<n;i++)
if(w[i]>a){
cout<<"0"<<endl;
return 0;
}
for(int i=1;i<=n;i++){
sum+=w[i];
if(sum>a){
ans++;
sum=w[i];
}
}
cout<<ans<<endl;
return 0;
}
该博客介绍了如何运用贪心算法解决一道编程题:在保证每组罪犯智商总和不超过给定限制的前提下,求最少需要分成多少组。文章首先分析问题,指出这是一道贪心问题,并提供了代码实现。当遇到单个罪犯智商超过最大承载量时,直接输出0。否则,通过累计智商和判断是否超过限制,逐步确定最少的分组数。
171

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



