计蒜客 蒜头君的积木
问题描述
蒜头君酷爱搭积木,他用积木搭了 n 辆重量为 wi的小车和一艘最大载重量为 W 的小船,他想用这艘小船将 n 辆小车运输过河。每次小船运载的小车重量不能超过 W。另外,小船在运载小车时,每辆小车会对小船有一个损坏值si,当多辆小车一起运载时,该趟运载对小船的损坏值为船上所有小车的最大损坏值。
现在蒜头君想知道,如何用小船运载 n 辆小车,可以使得对小船造成的总损坏值最小。
输入格式
第一行输入两个数 W 和 n(100≤w≤400,1≤n≤16),分别表示小船的最大载重量和小车总数。
接下来输入 n 行,每行输入两个整数si和 wi(1≤si ≤50,10≤wi≤100),分别表示每辆小车对小船的损坏值和每辆小车的重量。
输出格式
输出一行,输出一个整数,表示用小船运载 nn 辆小车,最小的总损坏值。
样例输入
90 4
32 50
15 20
40 50
13 40
样例输出
72
#include<bits/stdc++.h>
using namespace std;
int W,N;
int minx=0x3f3f3f3f;
int s[20]={0},w[20]={0},dp[(1<<16)+10]={0};
int main(){scanf("%d%d",&W,&N);for(int i=1;i<=N;i++){scanf("%d%d",&s[i],&w[i]);}for(int i=0;i<(1<<N);i++){int ss=0,ww=0;//分别表示总的损坏值和总体积 for(int k=i,j=1;k;j++,k>>=1){if(k&1){ww+=w[j];ss=max(ss,s[j]);} }if(ww<=W){dp[i]=ss;//小于最大载重量时损坏值的计算方法 }else{dp[i]=minx;for(int j=i;j;j=(j-1)&i){dp[i]=min(dp[i],dp[j]+dp[j^i]);}}}cout<<dp[(1<<N)-1]<<endl;//最后的结果输出所有的小车运载的值 return 0;
}
状压DP里的经典做法,枚举子集
for(int i=0;i<(1<<n);i++){for(int j=i;j;j=(j-1)&i){dp[i]=min(dp[i],dp[j]+dp[j^i]);}
}
计蒜客 蒜头君的积木相关推荐
- 计蒜客 - 蒜头君的任务
计蒜客 蒜头君的任务 题目描述 蒜头君的上司给蒜头君布置了一个任务,蒜头君维护一个数列,要求提供以下两种操作: 查询操作. 语法:Q L 功能:查询当前数列中末尾 L L L 个数中的最大的数,并输出 ...
- 计蒜客--蒜头君的新游戏
1000ms 131072K 工作空闲之余,蒜头君经常带着同事们做游戏,最近蒜头君发明了一个好玩的新游戏:n 位同事围成一个圈,同事 A 手里拿着一个兔妮妮的娃娃.蒜头君喊游戏开始,每位手里拿着娃娃 ...
- 计蒜客-蒜头君回家(bfs)
蒜头君要回家,但是他家的钥匙在他的朋友花椰妹手里,他要先从花椰妹手里取得钥匙才能回到家.花椰妹告诉他:"你家的钥匙被我复制了很多个,分别放在不同的地方." 蒜头君希望能尽快回到家中 ...
- 计蒜客--蒜头君回家
蒜头君要回家,但是他家的钥匙在他的朋友花椰妹手里,他要先从花椰妹手里取得钥匙才能回到家.花椰妹告诉他:"你家的钥匙被我复制了很多个,分别放在不同的地方." 蒜头君希望能尽快回到家中 ...
- 计蒜客 蒜头君的训练室
问题描述 蒜头君的训练室有 N 个站点,另外有 M 条单向边连接这些站点.第 i 条路从 Si站到 Ei站,有高度为 Hi的围栏,蒜头君是需要跳跃的. 现在蒜头君们有 T 个任务要完成.第 ii 个 ...
- 计蒜客 蒜头君学英语
问题 蒜头君快要考托福了,这几天,蒜头君每天早上都起来记英语单词.花椰妹时不时地来考一考蒜头君:花椰妹会询问蒜头君一个单词,如果蒜头君背过这个单词,蒜头君会告诉花椰妹这个单词的意思,不然蒜头君会跟花椰 ...
- 计蒜客 蒜头君的购物口袋2 01背包问题
蒜头君去超市购物,他有一只容量为 V 的购物袋,同时他想买n 件物品,已知每件物品的体积 ivi和重要度pi.蒜头君想知道,挑选哪些物品放入购物袋中,可以使得买到的物品重要度之和最大,且物品体积和 ...
- 计蒜客- 蒜头君的工厂
E 蒜头君的工厂需要生产 n 个产品,每个产品会在记录本上记录开始生产的时间 x 以及完成生产的时间 y. 现在蒜头君拿到这本记录本以后想知道最多有多少件产品同时在生产线上生产. 注意:在同一时刻总是 ...
- [Java] 计蒜客---蒜头君的玩具
一.内容 二.思路 用差分数组算出每个点总共被包含了几次,比如1-4就等于1-4区间的数组都加上1.这样a数组最终保存的就是装了这个点总共被覆盖几次. 由于每次只能选3条线段,所以数组里面每个点的值必 ...
- 计蒜客 蒜头君的数轴
不考虑某个区间,其他区间必须距离相等,也就是要划分为距离为最大公约数. 那么如何快速求解任意$n-1$个区间的最大公约数?用l[i]表示前i个数的最大公约数,r[i]表示后$(n-i)$个区间的最大公 ...
最新文章
- 入门 Python GUI 开发的第一个坑
- neural network神经网络识别手写字体
- 【CodeVS 1540】银河英雄传说 2002年NOI全国竞赛
- iphone双卡_不吹不黑,今年的四款iPhone到底谁最值得买?
- ubuntu 局域网dns服务器_如何在 Ubuntu 16.04 服务器上配置内网 DNS 服务
- cdb内存 oracle,【CDB】怎样修改PDB的内存参数
- 面向对象笔试题练习一
- php实际开发过程,4.工作实际开发应用
- 461. Hamming Distance【数学|位运算】
- oracle中defined,Oracle:专栏定义(Oracle: column ambigously defined)
- iPhone至少还要三年才能使用苹果自研5G调制解调器
- 游戏本自动掉帧_机 · 科普帖丨如何在夏天告别游戏掉帧的问题
- JavaScript文档对象模型DOM节点操作之第一个子元素和最后一个子元素(3)
- spring单元测试无法注入bean_Spring容器启动@Value属性无法注入?
- eclipse 使用maven 创建springmvc + mybatis
- 高阶篇:4.4)FMEA手册的疑问与不足(个人观点)
- flexbox:1.0.0_了解Flexbox:您需要了解的一切
- phpcms一键清理数据后完整找回数据
- golang备忘录003: 使用waitgroup进行graceful shutdown
- 今日恐慌与贪婪指数为15 恐慌程度小幅上升