AcWing - 165 - 小猫爬山 = 状压dp
时间:2019-10-07
本文章向大家介绍AcWing - 165 - 小猫爬山 = 状压dp,主要包括AcWing - 165 - 小猫爬山 = 状压dp使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
https://www.acwing.com/problem/content/167/
18只猫,每只猫有重量,车有载重上限,求最小的数量的车把猫装完,保证有解。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
//dp[i][j]表示用了i只猫,j辆缆车,最后一辆缆车的最大空间
int dp[1 << 18][19];
int a[18];
int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
int n, w;
scanf("%d%d", &n, &w);
for(int i = 0; i < n; ++i)
scanf("%d", &a[i]);
memset(dp, -INF, sizeof(dp));
for(int k = 1; k <= n; ++k) {
dp[0][k] = w;
}
for(int i = 0; i < (1 << n); ++i) {
for(int j = 0; j < n; ++j) {
if((i & (1 << j)) == 0) {
for(int k = 0; k <= n; ++k) {
if(dp[i][k] >= a[j]) {
dp[i | (1 << j)][k] = max(dp[i | (1 << j)][k], dp[i][k] - a[j]);
}
if(dp[i][k] >= 0 && k + 1 <= n)
dp[i | (1 << j)][k + 1] = max(dp[i | (1 << j)][k + 1], w - a[j]);
}
}
}
/*for(int k = 0; k <= n; ++k) {
printf("dp[");
cout << bitset<5>(i);
printf("][%d]=%d\n", k, dp[i][k]);
}
puts("");*/
}
for(int k = 0; k <= n; ++k) {
if(dp[(1 << n) - 1][k] >= 0) {
printf("%d\n", k);
return 0;
}
}
}
原文地址:https://www.cnblogs.com/Inko/p/11631110.html
- 从wireshark抓包开始学习https
- 用于时间序列预测的Python环境
- Pandoc安装实现Markdown转PDF (CentOS6)
- String类replaceAll方法正则替换深入分析
- 微信硬件平台对接--蓝牙
- 初试git+github(linux环境)
- Raspberry PI Nginx 安装
- 微信支付-Java-SpringMVC基础一些代码支持
- 使用Kafka的High Level Consumer
- 微信公众号发送模板消息 Java实现。
- [Intellij IDEA]File size exceeds configured limit
- 那些年Struts 1.X 而今我还是不会
- 关于MySQL DNS解析探究之一:DNS解析确实在起作用
- 每一个程序员需要了解的10个Linux命令
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- BOSS直聘招聘信息获取之爬虫程序数据处理
- BOSS直聘招聘信息获取之爬虫程序分析
- 历时4个多月,学习了这 66 个CSS 特效
- ArrayList、LinkedList哪家强,据说90%人都不知道
- Windows创建克隆隐藏账号
- 学员分享-aspera踩坑记录
- BOSS直聘招聘信息获取之爬虫工具分析
- 把你的shiny网页工具部署在云服务器
- 面试中的路由问题
- BOSS直聘招聘信息获取之使用webdriver进行爬取
- es6中class的一些基础知识和es5语法的对比
- Windows 系统常用命令行命令(一):前言
- Vue项目使用mt-picker实现省市区三级联动踩坑记录
- Windows 系统常用命令行命令(二):路径与文件夹操作
- 微信小程序订阅消息推送