栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[ZCMU OJ]5239: 砝码称重(暴力循环/map遍历)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[ZCMU OJ]5239: 砝码称重(暴力循环/map遍历)

Description

现有n个砝码,第i个砝码的重量为ai,你至多能选择三个砝码进行称重,请问对于1~w中的所有整数,有多少数字能被这n个砝码称出来?

Input

单组测试数据,第一行输入两个正整数n(1≤n≤300),w(1≤w≤1000000),第二行输入n个正整数ai(1≤ai≤1000000),含义如题所述。

Output

输出1~w能被称出来的数量。

Sample Input

4 12

3 3 3 3

Sample Output

3

HINT

对于样例,只有3,6,9这三个整数能被称出来。

3=a1

6=a1+a2

9=a1+a2+a3

注意12由于需要四个砝码才能称出,故不计入答案。

Source

C语言练习题

_____________________________________________________________________________

思路:将w范围内的砝码利用map存入wt中,再利用三重循环暴力列举在w值内可用砝码组成的重量,再次利用wt记录。最后利用迭代器遍历map,对不同重量进行计数。

#include
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	
	int n,w;
	
	cin>>n>>w;
	int a[n+1];
	mapwt;//wt记录可能组成的重量 

	memset(a,0,sizeof(a));
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]<=w)//如果该砝码符合条件则提前存入wt 
		wt[a[i]]=1;
	}
	
	for(int i=0;i<=n;i++)
	for(int j=i+1;j<=n;j++)
	for(int k=j+1;k<=n;k++)
	if(a[i]+a[j]+a[k]<=w&&wt[a[i]+a[j]+a[k]]==0)//三重循环考虑多个砝码组成的重量 
	{
		//cout<::iterator it;//利用迭代器遍历map 
	int cnt=0;
	for(it=wt.begin();it!=wt.end();it++)
	{
		if(it->second)
		{
			//cout<first< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号