快快436 高智商罪犯一

该博客介绍了如何运用贪心算法解决一道编程题:在保证每组罪犯智商总和不超过给定限制的前提下,求最少需要分成多少组。文章首先分析问题,指出这是一道贪心问题,并提供了代码实现。当遇到单个罪犯智商超过最大承载量时,直接输出0。否则,通过累计智商和判断是否超过限制,逐步确定最少的分组数。

题目描述

共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;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值