hdu 5691 Sitting in line 状压动归
在本题中,n<=16n<=16n<=16, 不难想到可以将所选数字的编号进行状态压缩。
定义状态 dp[S][j]dp[S][j]dp[S][j],其中 SSS 代表当前所选出的所有数字编号,jjj 代表当前位置考虑的数字编号。
如果状态合法,可以转移状态 dp[S][j]=max(dp[S][j],dp[Sdp[S][j]=max(dp[S][j], dp[Sdp[S][j]=max(dp[S][j],dp[S^j][k]+val[j]∗val[k])j][k] +val[j]*val[k])j][k]+val[j]∗val[k])
不合法就直接跳过
本题比较简单,只要细节上不出错应该是一道送分题。
#include<cstdio>//hdu 5691
#include<cstring>
#include<algorithm>
using namespace std;
const int N=16;
const long long INF=-122222222222;
long long dp[1<<N][N+2];
int pos[N+2],val[N+2],idx[N+2];
int n;
void init()
{
memset(idx,0,sizeof(idx));
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&val[i],&pos[i]);
pos[i]=(pos[i]==-1)?-1:pos[i]+1;
if(pos[i]>0)idx[pos[i]]=i;
}
}
int check(int i,int j)
{
int cnt=0;
if((i&(1<<(j-1)))==0)return 0; //当前考虑的数在 i 中不存在。
for(int k=0;(1<<k)<=i;++k)if(i&(1<<k))++cnt;
if(pos[j]!=-1&&cnt!=pos[j])return 0;
if(idx[cnt]&&idx[cnt]!=j)return 0;
return 1;
}
int times(int s){
int cnt=0;
for(int k=0;(1<<k)<=s;++k)if(s&(1<<k))++cnt;
return cnt;
}
int main(){
int T;scanf("%d",&T);
for(int cas=1;cas<=T;++cas)
{
init();
for(int S=1;S<(1<<n);++S)
for(int j=1;j<=n;++j)
{
dp[S][j]=INF;
int mx=(S^(1<<(j-1)));
if(check(S,j)==0)continue;
if(mx==0){dp[S][j]=val[j];continue;}
int cnt=times(mx);
for(int k=1;k<=n;++k)
{
if(k==j)continue;
if(cnt==1)
{
long long a=0;
if(check(mx,k))dp[S][j]=max(dp[S][j],a+val[k]*val[j]);
}
else dp[S][j]=max(dp[S][j],dp[mx][k]+val[k]*val[j]);
}
}
long long ans=INF;
for(int i=1;i<=n;++i)
ans=max(ans,dp[(1<<n)-1][i]);
printf("Case #%d:\n",cas);
printf("%lld\n",ans);
}
return 0;
}
hdu 5691 Sitting in line 状压动归的更多相关文章
- hdu 5691 Sitting in Line 状压dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5691 题解: 和tsp用的状压差不多,就是固定了一些访问顺序. dp[i][j]表示前cnt个点中布 ...
- HDU 5691 ——Sitting in Line——————【状压动规】
Sitting in Line Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Other ...
- hdu 5691 Sitting in Line
传送门 Sitting in Line Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/O ...
- BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压动归
Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...
- HDU 3605 Escape 最大流+状压
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5025 (BFS+记忆化状压搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5025 题目大意: 迷宫中孙悟空救唐僧,可以走回头路.必须收集完钥匙,且必须按顺序收集.迷宫中还有蛇, ...
- HDU 6149 Valley Numer II 状压DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意:中文题目 解法:状压DP,dp[i][j]代表前i个低点,当前高点状态为j的方案数,然后枚 ...
- HDU 1074 Doing Homework【状压DP】
Doing Homework Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he ...
- HDU 5434 Peace small elephant 状压dp+矩阵快速幂
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant Accepts: 38 Submissions: ...
随机推荐
- 洛谷P2776 [SDOI2007]小组队列 链表 + 模拟
有些细节需要注意: 1.编号和元素种类都从0开始标号. 2.需要特判一下队列被弹空的情况. Code: #include<cstdio> #include<cstring> u ...
- Mybatis批量插入的代码实现
简单的学习总结一下,希望能帮到需要的同学! 1.mapper.xml文件sql语句如下: <insert id="insertBatch" parameterType=&qu ...
- 【JavaScript框架封装】实现一个类似于JQuery的动画框架的封装
// 动画框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({}); // 不需要参与链式访问的 ...
- Ubuntu安装Docker 适合Ubuntu17.04版本
Docker介绍 Docker是一个开源的容器引擎,它有助于更快地交付产品.Docker可将应用程序和基础设施层隔离,并且将基础设施当作程序一样进行管理.使用Docker,可以更快地打包,测试以及部署 ...
- eclipse 去掉Eclipse打开后定期弹出Usage Data Upload对话框
Eclipse 的 UDC 老定期蹦出来说要上传使用数据到 eclipse 官网服务器去除方法: 1.删除 eclipse/plugins 目录下以 org.eclipse.epp.usagedata ...
- cogs 306. [SGOI] 糊涂的记者
306. [SGOI] 糊涂的记者 ★★★ 输入文件:sign.in 输出文件:sign.out 评测插件时间限制:1 s 内存限制:128 MB [问题描述] 在如今的信息社会中,时 ...
- ASP.Net Cookie总结
Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...
- [React] Reference a node using createRef() in React 16.3
In this lesson, we look at where we came from with refs in React. Starting with the deprecated strin ...
- 使用UE4公布安卓平台游戏
使用了几天的UE4 ,总算是将游戏在安卓平台执行起来了.当中遇到非常多问题,而且终于依旧有一些问题没能解决. 整体感觉是UE4这款引擎眼下还不够成熟.问题较多. 没有unity使用起来方便. 可是既然 ...
- Android測试APP工具(一)
近期面试APP开发者的时候,遇到了技术总监问 APP測试的概念性问题.后面感觉主要的项目流程.项目逻辑.屏幕适配. 測试是全然没有问题的.可是对于APP的性能測试.压力測试等高端的測试.还是存在着美中 ...