【题目链接】 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. win7---虚拟wifi无法启动承载网络

    转载自:http://nbbbs.zol.com.cn/40/32108_397955.html 解决方案:控制面板→硬件和声音→电源选项→更改计划设置→更改高级电源设置→无线适配器设置→节能模式,改 ...

  2. 二进制转16进制JAVA代码

    public class Binary2Hex { public static void main(String[] args) { String bString ="10101000&qu ...

  3. Spring学习--依赖注入的方式

    Spring 依赖注入: 属性注入(最常使用) 构造函数注入 工厂方法注入(很少使用,不推荐) 属性注入:通过 setter 方法注入 Bean 的属性值或依赖的对象 , 使用<property ...

  4. Sqlserver面试题

    1.用一条SQL语句 查询出每门课都大于80分的学生姓名 name   kecheng   fenshu 张三     语文       81张三     数学       75李四     语文   ...

  5. java.sql.Date和java.util.Date的不同和相互转换方式

    一:前言 这是我在新的公司写的第一份博客吧,来了又一个星期了吧,但是在来的那几天我真的很迷茫的感觉这里是很不适合我的样子,而且我又是来实习的,我很不愿意啊,自己做的又是java web,最原始的ser ...

  6. Quartus ModelSim联合仿真中的RAM初始化

    Modelsim只支持Hex格式的初始化文件,文件需要放在仿真的根目录下,例如:.\simulation\modelsim:并且在利用Quartus宏生成IP时,选择的初始化文件必须用绝对路径!否则M ...

  7. bzoj2442&&codevs4654 单调队列优化dp

    这道题也是一道单调队列 很明显满足各种性质 f[i]表示i不选前面k-1个都选的最小损失 维护的是个单增队列 q[head]是队列最小值 代码十分简介 注意longlong就okay #include ...

  8. 02-更改窗口的根控制器 Demo示例程序源代码

      源代码下载链接:02-更改窗口的根控制器.zip18.0 KB // MJAppDelegate.h // //  MJAppDelegate.h //  02-更改窗口的根控制器 // //  ...

  9. 大话Linux内核中锁机制之原子操作、自旋锁【转】

    转自:http://blog.sina.com.cn/s/blog_6d7fa49b01014q7p.html 多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实 ...

  10. phoronix-test-suite测试云服务器

    centos系统 phoronix-test-suite是目前Linux下比较常用的性能测试软件. 使用phoronix-test-suite条件前提:需要安装php5,需要PHP都DOM扩展 因为是 ...