【题目链接】 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. LaTeX的图片插入及排版[转]

    LaTeX中一般只直接支持插入eps(Encapsulated PostScript)格式的图形文件, 因此在图片插入latex文档之前应先设法得到图片的eps格式的文件. UNIX下的各种应用软件都 ...

  2. Spring源码解析-AOP简单分析

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等,不需要去修改业务相关的代码. 对于这部分内容,同样采用一个简单的例子和源码来说明. 接口 public ...

  3. 关于session variables 和 global variables

    背景 有同学问到这样一个问题:原来的binlog格式是statement,为什么执行了 set global binlog_format='row' 和 set binlog_format='row' ...

  4. bzoj 2525 [Poi2011]Dynamite 二分+树形dp

    [Poi2011]Dynamite Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 270  Solved: 138[Submit][Status][D ...

  5. VC++使用CImage在内存中Jpeg转换Bmp图片

    VC++中Jpeg与Bmp图片格式互转应该是会经常遇到,Jpeg相比Bmp在图片大小上有很大优势. 本文重点介绍使用现有的CImage类在内存中进行转换,不需要保存为文件,也不需要引入第三方库. Li ...

  6. 小程序根据input输入,动态设置按钮的样式

    [需求]实现当手机号已填写和协议已勾选时,“立即登录”按钮变亮,按钮可点击:若有一个不满足,按钮置灰,不可点击:实现获取短信验证码,倒计时提示操作:对不满足要求内容进行toast弹窗提示. <v ...

  7. DOM读取和修改节点对象属性

    一.获取和修改元素间的内容(3种) 1.innerHTML 获得/设置元素开始标签和结束标签之间的html原文 固定套路:1.删除父元素下所有子元素:parent.innerHTML="&q ...

  8. 【SPOJ-QTREE3】树链剖分

    http://www.spoj.com/problems/QTREE3/ 时间限制:2s    代码长度限制:50000B     内存限制:1536MB [题目描述] 给出N个点的一棵树(N-1条边 ...

  9. 【Foreign】采蘑菇 [点分治]

    采蘑菇 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output Sample Input 5 1 2 3 2 3 1 2 1 ...

  10. bzoj4430 [Nwerc2015]Guessing Camels赌骆驼

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4430 [题解] 把每只骆驼在第一个人.第二个人.第三个人的位置找出来,然后做三维偏序即可. ...