uestc1633

题意

给你一个大小为 \(n\) 的集合 \(S\) ,集合里有 \(n\) 个互不相同正整数,有 \(q\) 个询问,每次询问是否能选择 \(S\) 中的一些数字 ( 同一个数字可以选择多次,也可以任何数字都不选),使它们相加的和为 \(m\) 。

分析

这种题型 竟然 可以套用最短路的模型。

如果 \(k\) 在集合中,那么如果 \(a\) 是合法的和的方案,那么 \(a + k\) 一定是合法的。

那么我们只要求出 \(\% k\) 后得到 \([0, k - 1]\) 这些数的最小的和( \(d\) 数组)。那么判断是否可以组成 \(m\) ,只需要 \(m >= d[m \% k]\) 。

主要就是维护一个小的先出的优先队列 ,所以先出来的值 ( 假设是 \(x\) ) \(\% k\) 的相同的余数中一定是最小的,这个时候就要标记 \(vis[x \% k] = 1\) ,所有后面出来的值 \(y\) ,如果 \(vis[y \% k]\) 已经标记过 ( 假设就是前面的 \(x\) 标记的 ) ,可以直接跳过,因为 \(x \% k == y \% k\) ,且 \(x < y\) ,前面 \(x\) 出队列后已经更新了其它的可能出现的余数,在拿 \(y\) 去更新就没必要了。

code

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2e3 + 10;
const int INF = 1e9 + 7;
int n, a[MAXN];
int d[50005];
int vis[50005];
void dij(int w) {
priority_queue<int, vector<int>, greater<int> > q;
fill(d, d + w, INF);
q.push(0);
d[0] = 0;
while(!q.empty()) {
int now = q.top(); q.pop();
if(vis[now % w]) continue;
vis[now % w] = 1;
for(int i = 0; i < n; i++) {
int dist = now + a[i];
if(dist < d[dist % w]) {
d[dist % w] = dist;
q.push(dist);
}
}
}
}
int main() {
scanf("%d", &n);
int w = INF;
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
w = min(w, a[i]);
}
dij(w);
int q;
scanf("%d", &q);
while(q--) {
int m;
scanf("%d", &m);
puts(m >= d[m % w] ? "YES" : "NO");
}
return 0;
}

uestc1633的更多相关文章

随机推荐

  1. PowerShell收发TCP消息包

    PowerShell收发TCP消息包 https://www.cnblogs.com/fuhj02/archive/2012/10/16/2725609.html 在上篇文章中,我们在PSNet包中创 ...

  2. [洛谷P1536]村村通

    题意:多组数据,当n为0时结束,每组数据表示有n个村子,m条路,求还需要建多少条路,使得所有的村子联通题解:用并查集求出有多少个联通块,然后求解 C++ Code: #include<cstdi ...

  3. vue.js 三种方式安装--npm安装

    Vue.js是一个构建数据驱动的 web 界面的渐进式框架.     Vue.js 的目标是通过简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易上手,便于与第三方库或既有项目整合.     ...

  4. BZOJ2460 [BeiJing2011]元素 【线性基】

    2460: [BeiJing2011]元素 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1675  Solved: 869 [Submit][St ...

  5. oracle大数据匹配处理C#

    忙碌了几天写出来的oracle存储过程在作业中执行. 写的oracle存储过程如果有什么不好的地方大家指点指点. oracle存储过程其中使用到游标嵌套.if.if嵌套.数据插入表.select插入表 ...

  6. BZOJ_DAY6???

    昨天没睡好啊啊啊,真是要命,睡不着,今天状态爆炸...34题击破. 下一步目标:网络流24题,树链剖分. (洛谷比赛了好开心,希望这次能比以前强吧,嗯)

  7. Codeforces Round #350 (Div. 2) D1

    D1. Magic Powder - 1 time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. [SCOI2007] 蜥蜴 (最大流)

    [SCOI2007] 蜥蜴 题目背景 07四川省选 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1 ...

  9. visio2013安装提示找不到Office.zh_cn\officeMUI.mis officemui.xml(转)

    windoes10 已经安装office2013后,想安装Visio2013,报错如题所示.解决方法我采用的是方法二:解压缩office2013的ISO包,解压缩Visio2013的ISO包,安装Vi ...

  10. CRM系统主要业务流程思维导图

    [CRM五策略]           ❶对客户进行分类,不是根据规模,而是根据和你的关系,越细腻越好:           ❷不定期更新客户资料,信息越全面越好:           ❸主动对客户进行 ...