桐桐的运输方案(transp)
【问题描述】
桐桐有 N 件货物需要运送到目的地,它们的重量和价值分别记为:
重量:W1,W2,…,Wn;
价值:V1,V2,…,Vn;
已知某辆货车的最大载货量为 X,并且当天只能运送一趟货物。这辆货车应
该运送哪些货物,才能在不超载的前提下使运送的价值最大?
【输入格式】transp.in
第一行是一个实数,表示货车的最大载货量 x(1<x≤100)。
第二行是一个正整数,表示待运送的货物数 n(1<n≤20)。
后面 n 行每行两个用空格隔开的实数,分别表示第 1 至第 n 件货物的重量 W
和价值 V。
【输出格式】transp.out
第一行为被运送货物的总价值(只输出整数部分);
第二行为按编号大小顺序输出所有被运送货物的编号(当一件都不能运送
时,不输出)。
【输入样例】
20
4
3.5 4
4 5
5 6.8
6.9 7
【输出样例】
22
1 2 3 4
【解题思路】
首先这题有实数运算,排除DP,再看数据范围,可以看出用二进制枚举可解,当然回溯也是可行的。
运用二进制枚举需要掌握基本的位运算
左移符号<< 相当于*2
右移符号>> 相当于/2
&是位运算中的符号,和熟悉的逻辑运算符&&基本相符
100&110=100
即只有两者为1时才返回1
表示一组物品选或不选的状态可以用一个0至2^n-1的整数表示,化成二进制后只要是1就代表着选这个物品。
【参考程序】

#include<iostream>
#include<cstdio>
using namespace std;
int n,record;
double x,ansv,answ,w[21],v[21],maxans;
int main()
{
freopen("transp.in","r",stdin);
freopen("transp.out","w",stdout);
cin>>x>>n;
for (int i=1;i<=n;i++) cin>>w[i]>>v[i];
int num=1<<n;//计算枚举的范围
for (int i=0;i<num;i++)//从全不选到全选,依次枚举
{
int tmp=1;
ansv=answ=0;
for (int j=0;j<n;j++)
{
if (((tmp<<j)&i)>0) //判断当前物品是否被选
{
ansv+=v[j+1];
answ+=w[j+1];
//装车
}
if (answ>x) break;//超载,此情况不可选
}
if (answ>x) continue;
if (ansv>maxans)
{
maxans=ansv;//记录答案
record=i;
}
}
cout<<int(maxans)<<endl;
int tmp=1;
for (int j=0;j<n;j++)
{
if (((tmp<<j)&record)>0) cout<<j+1<<" ";//判断当前物品是否被选
}
return 0;
}

【2018寒假集训 Day1】【位运算】桐桐的运输方案的更多相关文章

  1. 【2018寒假集训 Day1】【位运算】翻转游戏

    翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...

  2. 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)

    牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...

  3. 【2018寒假集训Day 1】【位运算】生成字符串

    生成字符串(strs) [问题描述] 假设字符串只由字符“0”,“1”,“”组成,其中字符“”表示该字符可由 字符“0”或“1”替代. 现有一些字符串,根据这些字符串生成所有可生成的字符串.如: {1 ...

  4. 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)

    花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...

  5. 【2018寒假集训 Day2】【动态规划】维修栅栏

    维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...

  6. 【2018寒假集训 Day2】【动态规划】钱币兑换(exchange)(自己翻译的2333)

    钱币兑换(exchange) 问题描述: Dave偶然获得了未来几天的美元(dollars)与马克(marks)之间的兑换率.例如Dave开始有100marks,请编写个程序帮助Dave找出最好的买卖 ...

  7. 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人

    蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...

  8. 清北学堂寒假集训DAY1

    第一天,上午讲了些基本的技巧和简单算法,主要就是适应这里. 中午跑到食堂吃了顿“饭”(我并没有挖苦233333),然后回宿舍休息休息 因为 迎接我们的是模拟啊啊啊啊啊阿 下午题一发下来,并没有想象中的 ...

  9. 洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解

    这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Ch ...

随机推荐

  1. javascript获取坐标/滚动/宽高/距离

    坐标(鼠标/触摸) event.screenX 鼠标/触摸,相对于显示屏的X坐标 event.screenY 鼠标/触摸,相对于显示屏的Y坐标 event.clientX 鼠标/触摸,相对于浏览器视口 ...

  2. Leetcode Tags(1)Linked List

    1.知识点回顾 https://www.cnblogs.com/BigJunOba/p/9174206.html https://www.cnblogs.com/BigJunOba/p/9174217 ...

  3. Md5与HMAC-SHA256

    Md5签名算法 private string CalMd5(string str) { var md5 = MD5.Create(); var bs = md5.ComputeHash(Encodin ...

  4. 解决axios发送post请求,后端接收不到数据

    https://segmentfault.com/a/1190000012635783

  5. reduce,map,filter 的用法

    # filter用法 (对每一个数据进行筛选,满足条件的就保留)# 1,filter(功能函数,容器类型数据)# 2,过滤出来是一个地址,用list,或tuple进行包装# 3,过滤出来的是原容器类型 ...

  6. 【原创】基于.NET的轻量级高性能 ORM - TZM.XFramework 之优雅增删改

    [前言] 大家好,我是TANZAME.出乎意料的,我们在立冬的前一天又见面了,天气慢慢转凉,朋友们注意添衣保暖,愉快撸码.距离 TZM.XFramework 的首秀已数月有余,期间收到不少朋友的鼓励. ...

  7. pymssql连接Azure SQL Database

    使用pymssql访问Azure SQL Database时遇到"DB-Lib error message 20002, severity 9:\nAdaptive Server conne ...

  8. 洛谷P3121 【[USACO15FEB]审查(黄金)Censoring (Gold)】

    双栈+AC自动机 这题其实跟一道KMP算法的题有一些渊源,它就是这道题的简单板. Clear: 给你两个串A,B,每次在B串中从左到右找串A,并将该子串删除,直到找不到为止,问你能删几次. 样例输入: ...

  9. [python]一些常用的python知识总结

    Pthon知识积累,遇到的各种python问题汇总 json.dumps()和json.loads()是json格式处理函数 json.dumps()函数是将一个Python数据类型列表进行json格 ...

  10. Redis过期--淘汰机制的解析和内存占用过高的解决方案

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Red ...