【DP合集】m-knapsack
给出 n 个物品,第 i 个物品有重量 w i 。现在有 m 个背包,第 i 个背包的限重为 c i ,求最少用几个背 包能装下所有的物品。
Input
输入的第一行两个整数 n, m ( n ≤ 24 , m ≤ 100) 。
接下来一行 n 个整数,描述 w ( w i ≤ 10^8 ) 。
接下来一行 m 个整数,描述 c ( c i ≤ 10^8 ) 。
Output
输出一行一个整数,描述最少需要使用的背包数。如果没有可行的方案来装下所有物品,请输出”NIE” (不含引号)。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<cstring>
using namespace std;
short dp[];int use[];
int wu[],bao[],n,m,inf; void cl(){
memset(wu,,sizeof(wu));
memset(bao,,sizeof(bao));
memset(dp,,sizeof(dp));
memset(use,,sizeof(use));
inf=use[];
} bool comp(int x,int y){
if(x>y) return ;
return ;
} void dfs(int x){
if(dp[x]<n) return;
int q=inf,p=inf;
for(int now=;now<=n;now++){
if(x&(<<(now-))){
int r=x-(<<(now-));
dfs(r);
if(bao[dp[r]+]-use[r]>=wu[now]) q=dp[r],p=use[r]+wu[now];
else if(bao[dp[r]+]>=wu[now]&&bao[dp[r]+]>=wu[now]) q=dp[r]+,p=wu[now];
else continue;
if(q<dp[x]) dp[x]=q,use[x]=p;
else if(q==dp[x]&&p<use[x]) use[x]=p;
}
}
} int main(){
cl();
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&wu[i]);
for(int i=;i<=m;i++) scanf("%d",&bao[i]);
sort(wu+,wu+n+,comp);
sort(bao+,bao+m+,comp);
if(bao[]<wu[]) {printf("NIE");return ;}
dp[]=use[]=;
dfs((<<n)-);
if(dp[(<<n)-]>m) printf("NIE");
else printf("%d",dp[(<<n)-]+(use[(<<n)-]>));
return ;
}
【DP合集】m-knapsack的更多相关文章
- dp合集 广场铺砖问题&&硬木地板
dp合集 广场铺砖问题&&硬木地板 很经典了吧... 前排:思想来自yali朱全民dalao的ppt百度文库免费下载 后排:STO朱全民OTZ 广场铺砖问题 有一个 W 行 H 列的广 ...
- 9.15 DP合集水表
9.15 DP合集水表 显然难了一些啊. 凸多边形的三角剖分 瞄了一眼题解. 和蛤蛤的烦恼一样,裸的区间dp. 设f[i][j]表示i~j的点三角剖分最小代价. 显然\(f[i][i+1]=0,f[i ...
- 9.14 DP合集水表
9.14 DP合集水表 关键子工程 在大型工程的施工前,我们把整个工程划分为若干个子工程,并把这些子工程编号为 1. 2. --. N:这样划分之后,子工程之间就会有一些依赖关系,即一些子工程必须在某 ...
- 【CJOJ2498】【DP合集】最长上升子序列 LIS
题面 Description 给出一个 1 ∼ n (n ≤ 10^5) 的排列 P 求其最长上升子序列长度 Input 第一行一个正整数n,表示序列中整数个数: 第二行是空格隔开的n个整数组成的序列 ...
- CJOJ 【DP合集】最长上升序列2 — LIS2
题面 已知一个 1 ∼ N 的排列的最长上升子序列长度为 K ,求合法的排列个数. 好题(除了我想不出来我应该找不到缺点), 想一想最长上升子序列的二分做法, 接在序列后面或者替换. 所以对于每一个位 ...
- 【DP合集】tree-knapsack
Description 给出一个 N 个节点的有根树,点编号 1 ∼ N ,编号为 i 的点有权值 v i .请选出一个包含树根的,点数 不超过 K 的连通块,使得点权和最大. Input 输入的第一 ...
- 【DP合集】背包 bound
N 种物品,第 i 种物品有 s i 个,单个重量为 w i ,单个价值为 v i .现有一个限重为 W 的背包,求能容 纳的物品的最大总价值. Input 输入第一行二个整数 N , W ( N ≤ ...
- 【DP合集】合并 union
给出一个 1 ∼ N 的序列 A ( A 1 , A 2 , ..., A N ) .你每次可以将两个相邻的元素合并,合并后的元素权值即为 这两个元素的权值之和.求将 A 变为一个非降序列,最少需要多 ...
- 【DP合集】棋盘 chess
给出一张 n × n 的棋盘,格子有黑有白.现在要在棋盘上放棋子,要求: • 黑格子上不能有棋子 • 每行每列至多只有一枚棋子 你的任务是求出有多少种合法的摆放方案.答案模 109+7109+7 . ...
随机推荐
- springboot以jar运行时参数传递
springboot以jar运行时参数传递 spring boot项目我们都习惯以内嵌tomcat方式.直接打包成jar,运行时使用: java -jar XXX.jar --spring.prof ...
- 配置Linux使用LDAP用户认证
配置Linux使用LDAP用户认证 本文首发:https://www.cnblogs.com/somata/p/LinuxLDAPUserAuthentication.html 我这里使用的是Cent ...
- Elastic Stack 笔记(五)Elasticsearch5.6 Mappings 映射
博客地址:http://www.moonxy.com 一.前言 关系型数据库对我们来说都很熟悉,Elasticsearch 也可以看成是一种数据库,所以我们经常将关系型数据库中的概念和 Elastic ...
- Elastic Stack 笔记(一)CentOS7.5 搭建 Elasticsearch5.6 集群
博客地址:http://www.moonxy.com 一.前言 Elasticsearch 是一个基于 Lucene 的分布式搜索引擎服务,采用 Java 语言编写,使用 Lucene 构建索引.提供 ...
- TCGA各种肿瘤数据的20多种不同玩法/挖掘方法
肿瘤基因组图谱 (The Cancer Genome Atlas,TCGA) 计划是由美国国家癌症研究院(National Cancer Institute,NCI)和美国国家人类基因组研究所(Nat ...
- AMBA——slave的HREADY信号
在前几天的ARM面试中,被问到总线架构,主要是AMBA那一套东西.对于AMBA之前上课学过一点,但很肤浅.为了面试上网查了一下.也看了部分协议补充了一下,但是接触的少,理解的不深入,被问到之前没遇到的 ...
- 24 (OC)* 加密
一 .MD5加密 MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码. MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是 ...
- net core WebApi——缓存神器Redis
目录 前言 Redis 使用 RedisUtil 测试 小结 @ 前言 中秋过完不知不觉都已经快两周没动这个工程了,最近业务需要总算开始搞后台云服务了,果断直接net core搞起,在做的中间遇到了不 ...
- 操作DOM会影响WEB应用的性能
平时在工作中,要优化自己开发的WEB应用的性能,一般是遵循以下几个原则: 1.减少网络请求. 2.压缩.合并静态资源文件,以此来减轻网络传输的带宽压力和资源消耗. 3.代码逻辑层面上的性能优化.比如减 ...
- 跟我学SpringCloud | 第十九章:Spring Cloud 组件 Docker 化
前面的文章<跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境>我们介绍了基础环境系统和 JRE 的容器化,这一节我们介绍 Spring Cloud 组件的容器 ...