CF788C The Great Mixing BFS+思维

这个模型十分巧妙啊,好题好题~

code:

#include <bits/stdc++.h>
#define N 3006
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,k,vis[N],in[N],dp[N];
vector<int>v;
queue<int>q;
int main()
{
    int i,j;
    // setIO("input");
    scanf("%d%d",&n,&k);
    for(i=1;i<=k;++i)
    {
        int x;
        scanf("%d",&x), in[x]=1;
    }
    memset(dp,0x3f,sizeof(dp));
    for(i=0;i<=1000;++i)
    {
        if(in[i])
        {
            v.push_back(n-i);
            int x=n-i+1000;
            dp[x]=1;
            if(x==1000)
            {
               printf("1\n");
               return 0;
            }
            q.push(x);
        }
    }
    for(;!q.empty();)
    {
        int u=q.front();q.pop();
        for(i=0;i<v.size();++i)
        {
            int x=u+v[i];
            if(x>=0&&x<=2000&&dp[x]>dp[u]+1)
            {
                dp[x]=dp[u]+1;
                q.push(x);
            }
        }
    }
    if(dp[1000]>=100000) printf("-1\n");
    else printf("%d\n",dp[1000]);
    return 0;
}

  

原文地址:https://www.cnblogs.com/guangheli/p/11619099.html

时间: 2024-11-06 13:54:18

CF788C The Great Mixing BFS+思维的相关文章

DFS/BFS+思维 HDOJ 5325 Crazy Bobo

题目传送门 1 /* 2 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 3 在树上的路径权值都小于这两个点 4 DFS/BFS+思维:按照权值的大小,从小的到大的连有向边,搜索最多连接点数即是答案.因为排序后,他们之间的路径, 5 可定都是从当前节点u连过去的,那么都是小于这两个节点的.DFS需手动加栈,BFS类似拓扑排序的思路 6 */ 7 #pragma comment (linker, "/STACK:1024000000,10240000

Gym 100971A Treasure Island BFS 思维题

A - Treasure Island Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Description standard input/output Announcement Statements Pirate John Silver has found a map depicting exactly one island in a sea. The ma

小花梨判连通 (bfs+思维+map统计数量)

如果两个集合存储颜色的情况相同,说明这两个在k个图中都是在一个集合的 学到的点:用map,将vector映射一个整数时,只有vector后面的邻接的数据都一样时,才认为两个vector一样 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<ma

codeforces gym #101987B -Cosmetic Survey(建图+bfs思维)

题目链接: https://codeforces.com/gym/101987/attachments 题意: 给出$n$个节点,$m$条边 对于所有$(a,b)$,求出$a$到$b$路径中最小边的最大值 注意两个隐藏条件 1.不存在环 2.如果$a$到$b$,$b$到$c$,那么$len(a,b)>len(b,c)$ 数据范围: $1\leq n \leq 500$ $1\leq m \leq 250000$ 分析: 一条路径最小值 AC代码: #include<bits/stdc++.h&

hdu 4474 BFS+思维题

http://acm.hdu.edu.cn/showproblem.php?pid=4474 如果A%n ==B %n  (A<B) 那么A接下来A经若干次填位数使得A'%n==0,这个过程也可以使B'%n==0  但是显然A更小,所以开一个1e4的数组判重 犯得二逼错误: 1.需要记录每一位,不是mod%10就是每一位 2.第一位枚举1~9,但是仍然需要%n 3.必然需要高精度,开始ll  WA到死 #include <cstdio> #include <cstring>

集训队8月2日(BFS)

看书情况:109~124页 刷题数:6 今天把上两次比赛的该补的题都补了,补题有博客,还写了两道书上例题的博客. 书上例题 BFS思维https://www.cnblogs.com/2462478392Lee/p/11291434.html 二分+双向DFShttps://www.cnblogs.com/2462478392Lee/p/11291391.html 补题 十倍快速幂+斐波那契变形通式https://www.cnblogs.com/2462478392Lee/p/11290710.h

Codeforces 788C The Great Mixing(背包问题建模+bitset优化或BFS)

[题目链接] http://codeforces.com/problemset/problem/788/C [题目大意] 给出一些浓度的饮料,要求调出n/1000浓度的饮料,问最少需要多少升饮料 [题解] 设浓度为a,现在要求出系数x1,x2,x3……,使得x1*a1+x2*a2+x3*a3+……=n*(x1+x2+x3+……) 得a1*(x1-n)+a2*(x2-n)+a3*(x3-n)+……=0 假设现在有x1-n和x2-n,设其数值为x和y,那么一定有(x)*y+(-y)*x=0, x+y

CodeForces 789E bfs建模,思维

CodeForces 789E 题意:有k种可乐,每种的测试为ai/1000. 要你合成一种浓度为n/1000的可乐,问最小要杯可乐,每种可乐可重复取. tags:  要注意到浓度绝不会超过1000/1000. 假设选取m杯可乐,则 (a1+a2+......+am) / m = n,变换一下为(a1-n)+(a2-n)+......+(am-n) = 0.即要选 m杯可乐,其浓度减 n之和为0.而浓度不超过1000,故(a1-n)+(a2-n)+....+(as-n)的和肯定在 -1000~1

魔戒(思维+bfs)

Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E".空间中可能存在障碍物,标为 "#",其他为可以通过的位置. 现在他们想要尽快到达魔戒进行探索,你能帮他们算出最小时间是最少吗?我们认为飞船每秒只能沿某个坐标轴方向移动一个单位,且不能越出四维空间. Input 输入数据有多组(数据组数不超过 30),到 EOF 结束. 每组输入 4