bzoj 2118 墨墨的等式 dijkstra

本文介绍了一种解决特定模数下最小值问题的方法。通过选取一个基准数并构建图论模型来确定各个余数对应的最小值,进而采用最短路径算法求解在给定区间内的有效解数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接点这里

唔,先说点关于题目的但是对于此题没用的东西。。

如果gcd(a,b)=1,那n*a+m*b所不能组成的最大的数是a*b-a-b,,所以如果这题范围是几百的话,那a*b才几十万,完全可以完全背包做,,,,恩,,这个和这题没毛线关系

我们在这12个数任选一个数假设a,,假设我们已经求出膜a等于x的最小的B(记做a*k+x)(a-1>=x>=0),那B集合中的每一个数都可以由某一个余数x,与其对应最小的a*k+x加上多少个B表示。。这个应该很好算了。

那怎么算出这a个余的最小a*k+x那。。。我们可以将每个余x看成一个点,,加上某个数后就变成新的余y,,x就向y连一条相应权值的边,,,,,,,,,就好了

update:看到一个加强版题目,下面有叉姐的解答:https://post.icpc-camp.org/d/674-poi-x-sums/9

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define INFLL 0x3f3f3f3f3f3f3f3f
#define FIN freopen("input.txt","r",stdin)
#define mem(x,y) memset(x,y,sizeof(x))
typedef unsigned long long ULL;
typedef long long LL;
#define fuck(x) cout<<"x"<<endl;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef pair<pair<int,int>,int> PIII;
typedef pair<LL,int> PII;
const double eps=1e-6;
const int MX=5e5+5;
const int P=23333333;
int n;
LL bmin,bmax;
int w[22];
LL d[MX];
void dijkstra(int s)
{
    priority_queue<PII,vector<PII>,greater<PII> >Q;
    mem(d,0x3f);
    d[s]=0;
    Q.push(PII(0,s));
    while(!Q.empty())
    {
        int u=Q.top().second;
        LL dis=Q.top().first;
        Q.pop();
        if(dis>d[u])continue;
        for(int i=2; i<=n; i++)
        {
            int v=(u+w[i])%w[1];
            if(d[v]<=dis+w[i])continue;
            d[v]=dis+w[i];
            Q.push(PII(d[v],v));
        }
    }
}
int main()
{
    FIN;
    while(cin>>n>>bmin>>bmax)
    {
        bmin--;
        for(int i=1; i<=n; i++)scanf("%d",&w[i]);
        sort(w+1,w+1+n);
        dijkstra(0);
        LL ansa=0,ansb=0;
        for(int i=0; i<w[1]; i++)
        {
            if(d[i]<=bmin)
            {
                ansa=ansa+(bmin-d[i])/w[1]+1;
            }
            if(d[i]<=bmax)
            {
                ansb=ansb+(bmax-d[i])/w[1]+1;
            }
        }
        cout<<ansb-ansa<<endl;
    }
    return 0;
}



CH341A编程器是一款广泛应用的通用编程设备,尤其在电子工程和嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器和其他IC芯片。这款编程器的最新版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储程序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编程器的1.3版更新,意味着它可以与更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编程效率和稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗和非易失性存储的应用场景。 全功能版的CH341A编程器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编程。 使用CH341A编程器进行编程操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动程序和编程软件。在本例中,压缩包中的"CH341A_1.30"很可能是编程软件的安装程序。安装后,用户可以通过软件界面选择需要编程的芯片类型,加载待烧录的固件或数据,然后执行编程操作。编程过程中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编程器1.3版是面向电子爱好者和专业工程师的一款实用工具,其强大的兼容性和易用性使其在众多编程器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编程工作,CH341A编程器是理想的选择。通过持续的软件更新和升级,它保持了与现代电子技术同步,确保用户能方便地对各种芯片进行编程和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值