【题目链接】 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=x-(-y)<1000,更多物品的答案不会超过两个物品,所以答案最多1000,
  那么现在就是背包问题容量0是否能被覆盖到,因为状态只有两种,是否被覆盖,
  所以我们可以用bitset优化。

  同时,我们发现这个最小答案相当于求最短路的过程,每次可以有一定的步长,
  问到达目标状态的最小值,所以可以将每种物品作为步长,用bfs来解决背包问题。

【代码】

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <vector>
using namespace std;
typedef long long LL;
int x,n,k;
int main(){
scanf("%d%d",&n,&k);
vector<bool> vis(1001,0);
for(int i=1;i<=k;i++){
scanf("%d",&x);
vis[x]=1;
}vector<int> v;
for(int i=0;i<=1000;i++)if(vis[i])v.push_back(i-n);
bool flag=0;
bitset<2010>cur,nxt;
cur[1000]=1;
for(int i=1;i<=1000&&!flag;i++){
nxt.reset();
for(int x=0;x<v.size();x++){
if(v[x]>0)nxt|=cur<<v[x];
else nxt|=cur>>-v[x];
}swap(cur,nxt);
if(cur[1000]){flag=1;printf("%d\n",i);}
}if(!flag)puts("-1");
return 0;
}
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int n,k,x;
int main(){
scanf("%d%d",&n,&k);
vector<bool> vis(1001,0);
for(int i=1;i<=k;i++){
scanf("%d",&x);
vis[x]=1;
}vector<int> vs;
for(int i=0;i<=1000;i++)if(vis[i])vs.push_back(i-n);
vector<int> dp(2010,-1),q;
for(int i=0;i<vs.size();i++){
int u=vs[i]+1000;
dp[u]=1;
q.push_back(u);
}
for(int i=0;i<q.size();i++){
int u=q[i];
for(int x=0;x<vs.size();x++){
int v=u+vs[x];
if(v>=0&&v<=2000&&dp[v]<0){
dp[v]=dp[u]+1;
q.push_back(v);
}
}
}printf("%d\n",dp[1000]);
return 0;
}

  

Codeforces 788C The Great Mixing(背包问题建模+bitset优化或BFS)的更多相关文章

  1. Codeforces 788C The Great Mixing

    The Great Mixing 化简一下公式后发现, 问题变成了, 取最少多少数能使其和为1, bitset优化一下背包就好啦. 题解中介绍了一种bfs的方法没, 感觉比较巧妙. #include& ...

  2. Codeforces 576D - Flights for Regular Customers(bitset 优化广义矩阵乘法)

    题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,你初始在 \(1\) 号点,边上有边权 \(c_i\) 表示只有当你经过至少 \(c_i\) 条边的时候你才能经过第 \(i\) ...

  3. Codeforces.788C.The Great Mixing(bitset DP / BFS)

    题目链接 \(Description\) 有k种饮料,浓度Ai给出,求用最少的体积配成n/1000浓度的饮料. \(Solution\) 根据题意有方程 (A1x1+A2x2+...+Anxn)/[( ...

  4. Codeforces 566E - Restoring Map(bitset 优化构造)

    Codeforces 题目传送门 & 洛谷题目传送门 本来说好的不做,结果今早又忍不住开了道题/qiao 我们称度为 \(1\) 的点为叶节点,度大于 \(1\) 的点为非叶节点. 首先考虑如 ...

  5. Axel and Marston in Bitland CodeForces - 782F (bitset优化)

    题目链接 $dp[0/1][i][x][y]$表示起始边为0/1, 走$2^i$ 步, 是否能从$x$走到$y$ 则有转移方程 $dp[z][i][x][y]\mid=dp[z][i-1][x][k] ...

  6. Codeforces Round #207 (Div. 1) D - Bags and Coins 构造 + bitset优化dp + 分段查找优化空间

    D - Bags and Coins 思路:我们可以这样构造,最大的那个肯定是作为以一个树根,所以我们只要找到一个序列a1 + a2 + a3 .... + ak 并且ak为 所有点中最大的那个,那么 ...

  7. Codeforces Round #390 (Div. 2) E(bitset优化)

    题意就是一个给出2个字符矩阵,然后进行匹配,输出每个位置的匹配的结果 (超出的部分循环处理) 一种做法是使用fft,比较难写,所以没有写 这里使用一个暴力的做法,考虑到一共只出现26个字符 所以使用一 ...

  8. hdu 5506 GT and set dfs+bitset优化

    GT and set Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Probl ...

  9. hdu 5745 La Vie en rose DP + bitset优化

    http://acm.hdu.edu.cn/showproblem.php?pid=5745 这题好劲爆啊.dp容易想,但是要bitset优化,就想不到了. 先放一个tle的dp.复杂度O(n * m ...

随机推荐

  1. boost 文件操作

    void testFileSystem() { boost::filesystem::path path("/test/test1"); //初始化 boost::filesyst ...

  2. Leetcode 45. Jump Game II(贪心)

    45. Jump Game II 题目链接:https://leetcode.com/problems/jump-game-ii/ Description: Given an array of non ...

  3. POJ3349 Snowflake Snow Snowflakes (hash

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 48624   Accep ...

  4. 动态性能视图v$session_longops

    v$session_longops This view displays the status of various operations that run for longer than 6 sec ...

  5. iOS 后台运行执行代码(例如定位)

  6. CentOS7 Tomcat 启动过程很慢,JVM上的随机数与熵池策略

    1. CentOS7 Tomcat 启动过程很慢 在centos启动官方的tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的: <co ...

  7. 网络流专题练习Day1

    04/16 一共做了8道题 首先网络流目前自己掌握的只有最大流Dinic算法和普通的费用流算法 有空还要去学习一下SAP和ZKW费用流(flag早早立在前面以后看到都有动力... 但网络流的算法个人认 ...

  8. sender的作用

        https://www.evernote.com/shard/s227/sh/c2441a07-6b7e-4659-8452-9f768ee9cc66/73a115ed352421e10629 ...

  9. [bzoj2427][HAOI2010]软件安装——强连通分量+树形DP

    题目大意 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...

  10. [Leetcode Week3]Clone Graph

    Clone Graph题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/clone-graph/description/ Description Clon ...