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=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)的更多相关文章
- Codeforces 788C The Great Mixing
The Great Mixing 化简一下公式后发现, 问题变成了, 取最少多少数能使其和为1, bitset优化一下背包就好啦. 题解中介绍了一种bfs的方法没, 感觉比较巧妙. #include& ...
- Codeforces 576D - Flights for Regular Customers(bitset 优化广义矩阵乘法)
题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,你初始在 \(1\) 号点,边上有边权 \(c_i\) 表示只有当你经过至少 \(c_i\) 条边的时候你才能经过第 \(i\) ...
- Codeforces.788C.The Great Mixing(bitset DP / BFS)
题目链接 \(Description\) 有k种饮料,浓度Ai给出,求用最少的体积配成n/1000浓度的饮料. \(Solution\) 根据题意有方程 (A1x1+A2x2+...+Anxn)/[( ...
- Codeforces 566E - Restoring Map(bitset 优化构造)
Codeforces 题目传送门 & 洛谷题目传送门 本来说好的不做,结果今早又忍不住开了道题/qiao 我们称度为 \(1\) 的点为叶节点,度大于 \(1\) 的点为非叶节点. 首先考虑如 ...
- 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] ...
- Codeforces Round #207 (Div. 1) D - Bags and Coins 构造 + bitset优化dp + 分段查找优化空间
D - Bags and Coins 思路:我们可以这样构造,最大的那个肯定是作为以一个树根,所以我们只要找到一个序列a1 + a2 + a3 .... + ak 并且ak为 所有点中最大的那个,那么 ...
- Codeforces Round #390 (Div. 2) E(bitset优化)
题意就是一个给出2个字符矩阵,然后进行匹配,输出每个位置的匹配的结果 (超出的部分循环处理) 一种做法是使用fft,比较难写,所以没有写 这里使用一个暴力的做法,考虑到一共只出现26个字符 所以使用一 ...
- 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 ...
- hdu 5745 La Vie en rose DP + bitset优化
http://acm.hdu.edu.cn/showproblem.php?pid=5745 这题好劲爆啊.dp容易想,但是要bitset优化,就想不到了. 先放一个tle的dp.复杂度O(n * m ...
随机推荐
- LaTeX的图片插入及排版[转]
LaTeX中一般只直接支持插入eps(Encapsulated PostScript)格式的图形文件, 因此在图片插入latex文档之前应先设法得到图片的eps格式的文件. UNIX下的各种应用软件都 ...
- Spring源码解析-AOP简单分析
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等,不需要去修改业务相关的代码. 对于这部分内容,同样采用一个简单的例子和源码来说明. 接口 public ...
- 关于session variables 和 global variables
背景 有同学问到这样一个问题:原来的binlog格式是statement,为什么执行了 set global binlog_format='row' 和 set binlog_format='row' ...
- bzoj 2525 [Poi2011]Dynamite 二分+树形dp
[Poi2011]Dynamite Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 270 Solved: 138[Submit][Status][D ...
- VC++使用CImage在内存中Jpeg转换Bmp图片
VC++中Jpeg与Bmp图片格式互转应该是会经常遇到,Jpeg相比Bmp在图片大小上有很大优势. 本文重点介绍使用现有的CImage类在内存中进行转换,不需要保存为文件,也不需要引入第三方库. Li ...
- 小程序根据input输入,动态设置按钮的样式
[需求]实现当手机号已填写和协议已勾选时,“立即登录”按钮变亮,按钮可点击:若有一个不满足,按钮置灰,不可点击:实现获取短信验证码,倒计时提示操作:对不满足要求内容进行toast弹窗提示. <v ...
- DOM读取和修改节点对象属性
一.获取和修改元素间的内容(3种) 1.innerHTML 获得/设置元素开始标签和结束标签之间的html原文 固定套路:1.删除父元素下所有子元素:parent.innerHTML="&q ...
- 【SPOJ-QTREE3】树链剖分
http://www.spoj.com/problems/QTREE3/ 时间限制:2s 代码长度限制:50000B 内存限制:1536MB [题目描述] 给出N个点的一棵树(N-1条边 ...
- 【Foreign】采蘑菇 [点分治]
采蘑菇 Time Limit: 20 Sec Memory Limit: 256 MB Description Input Output Sample Input 5 1 2 3 2 3 1 2 1 ...
- bzoj4430 [Nwerc2015]Guessing Camels赌骆驼
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4430 [题解] 把每只骆驼在第一个人.第二个人.第三个人的位置找出来,然后做三维偏序即可. ...