博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018 CCPC 秦皇岛 I (状压DP)
阅读量:4612 次
发布时间:2019-06-09

本文共 1004 字,大约阅读时间需要 3 分钟。

题意:

首先t组数据  (t<=5),一个n代表有n件东西,每个东西可以代表两个物品,商品或者袋子,每个都有个值,如果这个要代表袋子的话,当前就代表是容量,而且必须把其他几件不是袋子的物品放一些进来,容量必须正好装满,问你有多少种合法的方案,袋子中放入的物品不同也代表不同,同一件物品只能放入一个袋子

(n<=15)

 

Sample Input

3
3
1 1 1
5
1 1 2 2 3
10
1 2 3 4 5 6 7 8 9 10

Sample Output

7
15
127

 

思路:首先我们看数据范围我们就能想到是状压DP,但是我们不能直接去0 1代表哪些是背包物品,这样我们就不确定物品怎么放入背包,所以我们预处理,我们预处理出所有状态是否可以是一个已经放满的背包,并且枚举状态中哪一个才是背包,为了方便计算

weight[i] 代表 该状态下所有物品的值的和

f[i]  代表该状态下 可以是一个放满的背包的种数

dp[i] 代表 该状态下合法的所有种数

我们可以利用weight 计算出 f[i],即我们枚举到当前位时,我们假设当前位是背包  weight[i]-a[i]==a[i]  如果是的话 f[i]++,  因为当前背包容量是a[i],其他总和也是a[i],即代表当前背包装满了

然后我们可以利用所有的单个装满的背包合并起来算出最后状态

 

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)#define E 1e-6#define MOD 16007#define INF 0x3f3f3f3f#define N 16#define LL long longusing namespace std;int a[N];int f[1<

 

转载于:https://www.cnblogs.com/Lis-/p/11587438.html

你可能感兴趣的文章
CF1017G The Tree
查看>>
Tomcat部署项目定时任务跑了两次
查看>>
第一章 Java概述
查看>>
javascript:巧用eval函数组装表单输入项为json对象
查看>>
2.grep、awk、sed、cut处理文本
查看>>
为什么我们叫雪狼队
查看>>
wpf button变成圆角
查看>>
测试开发学习进阶教程 视频&PDF
查看>>
序列号和反序列化==》nodejs之querystring模块(尼玛,太强大,好用耶)
查看>>
C#基础-连接Access与SQL Server
查看>>
autofac
查看>>
MacOS 系统终端上传文件到 linux 服务器
查看>>
Excel导出POI
查看>>
兼容性
查看>>
第三方框架----FMDB的使用
查看>>
C# 堆栈和堆 Heap & Stack
查看>>
自动执行sftp命令的脚本
查看>>
linux下非root用户安装python
查看>>
Web Service Error wsse:InvalidSecurity Policy Requires Integrity (Doc ID 1370736.1)
查看>>
MySQL
查看>>