蓝桥杯真题训练 包子凑数(数论)

题解

找到所有数的最大公约数,如果这个数大于1,则说明一定会有数是凑不出来的,即INF,否则的话,用dp去寻找每个数是否能被凑出来,若j-a[i]可以被凑出来,则j一定可以被凑出来,状态转移。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
ll n;
ll a[105];
ll ans;
ll g;
ll dp[1000005];//因为n是1e2 所以这里可以开1e6
int flag=1;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
    g=a[1];
	for(int i=2;i<=n;i++)
	{
		g=__gcd(g,a[i]);//寻找所有数的最大公约数
		
	}
    if(g>1)//如果大于1了 肯定有无数个数找不到
		{
			flag=0;
			
		}
	dp[0]=1;
	if(flag)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=a[i];j<=1000000;j++)
			{
				dp[j]=max(dp[j],dp[j-a[i]]);//j可以由j-a[i]转移过来
			}
		}
		for(int i=1;i<=1000000;i++)
		{
			if(dp[i]==0)
			{
				ans++;
			}
		}
		cout<<ans<<endl;
	}
	else
	{
		cout<<"INF"<<endl;
	}
	return 0;
}

相关推荐

  1. 训练 包子凑数数论

    2024-03-27 17:54:01       45 阅读
  2. -包子凑数

    2024-03-27 17:54:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 17:54:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 17:54:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 17:54:01       82 阅读
  4. Python语言-面向对象

    2024-03-27 17:54:01       91 阅读

热门阅读

  1. C++之std::mem_fn使用和实现原理(全)

    2024-03-27 17:54:01       40 阅读
  2. 【力扣】134.加油站

    2024-03-27 17:54:01       39 阅读
  3. 2024-3-22 阿里云实习-一面

    2024-03-27 17:54:01       36 阅读
  4. uni-app 富文本编辑器

    2024-03-27 17:54:01       33 阅读
  5. `more` and `less`——查看内容时的导航比较

    2024-03-27 17:54:01       40 阅读
  6. Qt day3

    Qt day3

    2024-03-27 17:54:01      45 阅读
  7. css transform 平移、旋转、缩放、倾斜元素

    2024-03-27 17:54:01       42 阅读
  8. Qt智能指针--QScopedPointer

    2024-03-27 17:54:01       43 阅读
  9. windows抓hash抓明文

    2024-03-27 17:54:01       42 阅读
  10. 【数据结构】复杂度计算

    2024-03-27 17:54:01       41 阅读
  11. 浅析移动终端深度学习推理框架之MNN

    2024-03-27 17:54:01       33 阅读