不大 (Standard IO)

题目描述

有 n 个数,最多选 3 个,总和正好凑到 w 及以下的有几组。

输入

N W
A1​ A2​ … An
 

输出

答案

样例输入
#1

2 10
1 3


#2

2 1
2 3


#3

7 251
202 20 5 1 4 2 100
样例输出
#1

3

#2

0

#3

48
数据范围限制

1 ≤ N ≤ 300
1 ≤ W ≤ 1e6
1 ≤ Ai​ ≤ 1e6

这道题,就一点一点得去全枚举,找出所有可能,进行判断

上AC代码:

#include<bits/stdc++.h>
using namespace std;
int a[301],bz[1000001];
int main()
{
	int n,m,cnt=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		int sum=a[i];
		if(sum<=m) bz[sum]=1;
	}
	for(int i=1;i<=n-1;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			int sum=a[i]+a[j];
			if(sum<=m) 
			bz[sum]=1;
		}
	}
	for(int i=1;i<=n-1;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			for(int k=j+1;k<=n;k++)
			{
				int sum=a[i]+a[j]+a[k];
				if(sum<=m) 
				bz[sum]=1;
			}
			
		}
	}
	for(int i=1;i<=m;i++)
	{
		if(bz[i]!=0)
		cnt++; 
	}
	cout<<cnt;
}

看到这,那你是不是会疑惑,这时间复杂度不直接时间超限了吗?其实这些测试点 都不恐怖恶心。要说最恶心的就是在2015年中山市小学信息学竞赛中的《合法方案》这道题,用着方法,做多只有70分,剩下30分,直接TLE了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值