BZOJ 1231 [Usaco2008 Nov]mixup2 混乱的奶牛:状压dp + 滚动数组
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1231
题意:
给你n个数字s[i],问你有多少个排列,使得任意相邻两数字之差的绝对值大于m。
题解:
表示状态:
dp[i][j][state] = arrangements
i:考虑到第i个位置。
j:上一个数字是s[j]。(j = n表示没有上一个数字)
state:表示哪些数字已经被选过。
找出答案:
ans = ∑ dp[n][j][(1<<n)-1]
如何转移:
now: dp[i][j][state]
枚举第i个位置要放数字s[k]。
dp[i+1][k][state|(1<<k)] += dp[i][j][state]
转移条件:
(1)abs(s[j]-s[k])>m || j==n
与上一个数字之差的绝对值 > m,或没有上一个数字。
(2)!((state>>k)&1)
数字s[k]还没被选过。
边界条件:
dp[0][n][0] = 1
others = 0
优化:
因为dp要用long long存,空间正好爆了。。。
第一维改成滚动数组。
注意:当前为dp[i&1],要用dp[(i+1)&1],要把dp[(i+1)&1]全部设为0。
即:memset(dp[(i+1)&1],0,sizeof(dp[(i+1)&1]))
AC Code:
// state expression:
// dp[i][j][state] = arrangements
// i: considering ith pos
// j: last cow
// state: state of selection
//
// find the answer:
// sigma dp[n][j][(1<<n)-1]
//
// transferring:
// now: dp[i][j][state]
// dp[i+1][k][state|(1<<k)] += dp[i][j][state]
// abs(s[j]-s[k])>m || j==n
// !((state>>k)&1)
//
// boundary:
// dp[0][n][0] = 1
// others = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_N 17
#define MAX_S 65540 using namespace std; int n,m;
int s[MAX_N];
long long ans=;
long long dp[][MAX_N][MAX_S]; void read()
{
cin>>n>>m;
for(int i=;i<n;i++)
{
cin>>s[i];
}
} void solve()
{
memset(dp,,sizeof(dp));
dp[][n][]=;
for(int i=;i<n;i++)
{
memset(dp[(i+)&],,sizeof(dp[(i+)&]));
for(int j=;j<=n;j++)
{
for(int state=;state<(<<n);state++)
{
if(dp[i&][j][state])
{
for(int k=;k<n;k++)
{
if((abs(s[j]-s[k])>m || j==n) && !((state>>k)&))
{
dp[(i+)&][k][state|(<<k)]+=dp[i&][j][state];
}
}
}
}
}
}
for(int i=;i<n;i++)
{
ans+=dp[n&][i][(<<n)-];
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}
BZOJ 1231 [Usaco2008 Nov]mixup2 混乱的奶牛:状压dp + 滚动数组的更多相关文章
- bzoj 1231: [Usaco2008 Nov]mixup2 混乱的奶牛 -- 状压DP
1231: [Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec Memory Limit: 162 MB Description 混乱的奶牛 [Don Pi ...
- bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛(状压dp)
1231: [Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1032 Solved: 588[ ...
- bzoj[Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
[Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1204 Solved: 698[Submit ...
- B1231 [Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
发现是状压dp,但是还是不会...之前都白学了,本蒟蒻怎么这么菜,怎么都学不会啊... 其实我位运算基础太差了,所以状压学的不好. 题干: Description 混乱的奶牛 [Don Piele, ...
- bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛——状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1231 小型状压DP: f[i][j] 表示状态为 j ,最后一个奶牛是 i 的方案数: 所以 ...
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛 状态压缩dp
开始读错题了,然后发现一眼切~ Code: #include <cstdio> #include <algorithm> #define ll long long #defin ...
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛( dp )
状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) = Σ dp( i , S - { i } ) ( i ∈ S , ...
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛
Description 混乱的奶牛 [Don Piele, 2007] Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S ...
- bzoj 1231: [Usaco2008 Nov]mixup2 混乱的奶牛【状压dp】
设f[i][j]为奶牛选取状态为i,最后一头选的为j,转移直接f[k][(1<<(k-1)|i]+=f[j][i] #include<iostream> #include< ...
随机推荐
- js 保留两位小数 javascript
alert((0.9996*100).toFixed(2)); 得到99.96,这是我想要的! 使用Number.toFixed()可以格式数字显示任意的小数位!
- C 共用体
C 共用体 共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置的有效方式. 定 ...
- 微信小程序实战 购物车功能
代码地址如下:http://www.demodashi.com/demo/12400.html 一.准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.com/ ...
- Visual Studio 2015官方下载 秘钥破解
微软刚刚为开发人员奉上了最新大礼Visual Studio 2015正式版.如果你是MSDN订阅用户,现在就可以去下载丰富的相关资源.如果你指向体验一把尝尝鲜,微软也是很慷慨的. Visual Stu ...
- windows下使用Eclipse编译执行MapReduce程序 Hadoop2.6.0/Ubuntu
一.环境介绍 宿主机:windows8 虚拟机:Ubuntu14.04 hadoop2.6伪分布:搭建教程http://blog.csdn.net/gamer_gyt/article/details/ ...
- 添加w3c验证图片到网站
1.在http://validator.w3.org/网站验证 2.添加验证通过后的代码至自己的网站 类似<p> <a href="http://validator. ...
- 使用Chrome(PC)调试移动设备上的网页
最早开始调试移动端网页时,本人都是采取PC上改几行代码,手机上刷新一下看效果这种笨方法来开发的,效率低而且容易让人抓狂.最近偶然发现原来可以使用PC上的浏览器来调试移动设备,不由得感叹相逢恨晚. 工具 ...
- java线程用法
package com; public class Demo { public static void main(String[] args) { // TODO Auto-generated met ...
- 世界更清晰,搜狐新闻客户端集成HUAWEI HiAI 亮相荣耀Play发布会!
6月6日,搭载有“很吓人”技术的荣耀Play正式发布,来自各个领域的大咖纷纷为新机搭载的惊艳技术站台打call,其中,搜狐公司董事局主席兼首席执行官张朝阳揭秘:华为和搜狐新闻客户端在硬件AI方面做 ...
- ndk javah配置
Location: C:\Program Files\Java\jdk1.6.0_25\bin\javah.exe Working Directory: ${project_loc} Argument ...