【2018寒假集训 Day1】【位运算】桐桐的运输方案
桐桐的运输方案(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】【位运算】桐桐的运输方案的更多相关文章
- 【2018寒假集训 Day1】【位运算】翻转游戏
翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...
- 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)
牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...
- 【2018寒假集训Day 1】【位运算】生成字符串
生成字符串(strs) [问题描述] 假设字符串只由字符“0”,“1”,“”组成,其中字符“”表示该字符可由 字符“0”或“1”替代. 现有一些字符串,根据这些字符串生成所有可生成的字符串.如: {1 ...
- 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)
花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...
- 【2018寒假集训 Day2】【动态规划】维修栅栏
维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...
- 【2018寒假集训 Day2】【动态规划】钱币兑换(exchange)(自己翻译的2333)
钱币兑换(exchange) 问题描述: Dave偶然获得了未来几天的美元(dollars)与马克(marks)之间的兑换率.例如Dave开始有100marks,请编写个程序帮助Dave找出最好的买卖 ...
- 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人
蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...
- 清北学堂寒假集训DAY1
第一天,上午讲了些基本的技巧和简单算法,主要就是适应这里. 中午跑到食堂吃了顿“饭”(我并没有挖苦233333),然后回宿舍休息休息 因为 迎接我们的是模拟啊啊啊啊啊阿 下午题一发下来,并没有想象中的 ...
- 洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解
这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Ch ...
随机推荐
- 清理git仓库
参考 https://harttle.land/2016/03/22/purge-large-files-in-gitrepo.html https://git-scm.com/docs/git-re ...
- javascript严格模式的影响
针对js严格模式会报错的编码操作进行了整理,避免不严谨的代码习惯,面向未来编程(es6+) 变量 1.定义八进制格式的数字 2.不带var的变量定义--包括函数体内的 3.对变量的delete操作-- ...
- 数据库系统(六)---MySQL语句及存储过程
一.DDL.DML.DCL常用语句 1.DDL(Data Definition Language)数据库定义语言 (1)数据库模式定义 #创建数据库 create database if exsite ...
- [AI开发]零数学公式告诉你什么是(卷积)神经网络
大部分介绍神经网络的文章中概念性的东西太多,而且夹杂着很多数学公式,读起来让人头疼,尤其没什么基础的人完全get不到作者想要表达的思想.本篇文章尝试零公式(但有少量数学知识)说清楚什么是神经网络,并且 ...
- vue设置页面标题
使用vue-wechat-title插件对页面标题进行设置 1.安装模块 命令行窗口中运行npm install vue-wechat-title --save PS.如果程序正在运行,ctrl ...
- 前端技术之:JS开发几个有意思的东东
一. 查看性能分析报告 npm run build:prod --report 二.vue ui工具 三.vue-element-admin https://panjiachen.gite ...
- [考试反思]0914csp-s模拟测试43:破绽
T1会正解.爆int了,代码里一大堆long long但是有一个地方落了.-70分. 离考试结束还有19秒的时候发现手模样例爆负数了,没来得及改. T2没想.打暴力了.然而实际很好想...早读5分钟就 ...
- [考试反思]0819NOIP模拟测试26:荒芜
这么正式的考试,明天应该就是最后一次了吧 然而..今天,我仍然没能抓住机会 RNBrank1:.skyh还是稳.外校gmk拿走第三. 四五六名都是63-64.第七50.第八39.我和三个并列的是第九. ...
- N42-qq-林友埙-第二周作业
1.Linux发行版的系统目录名称命名规则及用途 2.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息 1.文件的元数据是指文件的属性.大小.创建时间.访问时间.属主属组等 ...
- Jenkins+JMeter+Ant 接口持续集成
JMeter安装 JMeter安装包: 下载地址:https://jmeter.apache.org/download_jmeter.cgi 依赖JDK环境 JDK环境配置: JAVA_HOME ...