题目http://acm.hdu.edu.cn/showproblem.php?pid=5691

状态DP,dp[i][j],i 表示的是一种状态,这个状态指的是当前这个数取或不取,j表示的是以第j个数结尾,

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long ll;
ll dp[<<][]; int num[],dis[],vis[];
ll max(ll x,ll y) {return x>y?x:y;}
const ll INF=1e18; int main()
{
int t,n,pos=;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
memset(vis,-,sizeof(vis));
for(int i=;i<(<<n);i++)
for(int j=;j<n;j++)
dp[i][j] = -INF;
for (int i= ; i<n ; i++) {
scanf("%d%d",&num[i],&dis[i]);
if (dis[i]!=-)
vis[dis[i]]=i;
}
if (vis[]!=-) dp[(<<vis[])][vis[]]=;// 0这个位子被占用了
else{
for (int i= ; i<n ; i++) // 没有特定位置
if (dis[i]==-) dp[(<<i)][i]=; //
}
int cas=(<<n)-;
for (int i= ; i<=cas ; i++){
int ans=;
for (int j= ; j<n ; j++)
if (i&(<<j))
ans++;
if (vis[ans]!=-)
{
ans=vis[ans];
for (int j= ; j<n ; j++)
if ((i&(<<j))&&j!=ans)
dp[i|(<<ans)][ans]=max(dp[i|(<<ans)][ans],dp[i][j]+num[j]*num[ans]);
}
else
{
for (int j= ; j<n ; j++){
if (i&(<<j)){
for (int k= ; k<n ; k++){
if (!(i&(<<k))){
dp[i|(<<k)][k]=max(dp[i|(<<k)][k],dp[i][j]+num[k]*num[j]);
}
}
}
}
}
}
printf("Case #%d:\n",++pos);
ll maxn=-INF;
for (int i= ; i<n ; i++)
maxn=max(maxn,dp[cas][i]);
printf("%I64d\n",maxn);
}
return ;
}

hdu 5691(状压DP) Sitting in Line的更多相关文章

  1. HDU 4778 状压DP

    一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...

  2. HDU 3001 状压DP

    有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路  成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...

  3. Doing Homework HDU - 1074 (状压dp)

    Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every ...

  4. hdu 2809(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白. #include<iostream> #in ...

  5. hdu 2167(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...

  6. Engineer Assignment HDU - 6006 状压dp

    http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...

  7. hdu 3254 (状压DP) Corn Fields

    poj 3254 n乘m的矩阵,1表示这块区域可以放牛,0,表示不能,而且不能在相邻的(包括上下相邻)两个区域放牛,问有多少种放牛的方法,全部不放也是一种方法. 对于每块可以放牛的区域,有放或者不放两 ...

  8. HDU 5823 (状压dp)

    Problem color II 题目大意 定义一个无向图的价值为给每个节点染色使得每条边连接的两个节点颜色不同的最少颜色数. 对于给定的一张由n个点组成的无向图,求该图的2^n-1张非空子图的价值. ...

  9. hdu 4739 状压DP

    这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ...

随机推荐

  1. 学JS的心路历程-JS支持面向对象?(二)

    昨天讲了面向对象的继承,今天我们来谈谈多态和封装吧! 多态polymorphism 抽象讲法解释,就是使用单一界面操作多种型态的物件 继承父类别,定义与父类别中相同的方法,但实作内容不同,称为复写(o ...

  2. nvm 安装

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash nvm install 8.9. ...

  3. openssl数字证书常见格式 协议

    证书主要的文件类型和协议有: PEM.DER.PFX.JKS.KDB.CER.KEY.CSR.CRT.CRL .OCSP.SCEP等. PEM – Openssl使用 PEM(Privacy Enha ...

  4. java和c#中String

    java中: c#中: 1.拼接字符串 sql语句中 in() str="'001','002','003'";至于产生string就这样  str1="'001'&qu ...

  5. js中switch/case分支的值可以是变量或表达式

    在一些高级语言如C#中,switch分支的值只能是常量,而js中可以是变量或表达式: <!DOCTYPE html> <html lang="en"> &l ...

  6. JMeter学习(二十九)自动化badboy脚本开发技术(转载)

    转载自 http://www.cnblogs.com/yangxia-test 一般人用badboy都是使用它的录制功能,其它badboy还是一款自动化的工具,它可以实现检查点.参数化.迭代.并发.报 ...

  7. spring 中 PO与DTO相互转换的工具类

    public class BeanMapper { /** * 持有Dozer单例, 避免重复创建DozerMapper消耗资源. */ private static DozerBeanMapper ...

  8. 基于正则表达式用requests下载网页中的图片

    在慕课网看了正则表达式和requests的课程后,为了加深学习记忆,决定简单记录. 实现步骤: 1.先打开你要下载的网页,查看源码找出图片位置 2.编写正则匹配图片url 3.保存图片到本地 图文步骤 ...

  9. Vue.Draggable:基于 Sortable.js 的 Vue 拖拽组件使用中遇到的问题

    Sortable.js 介绍 https://segmentfault.com/a/1190000008209715 项目中遇到的问题: A - 我需要在项目的拖拽组件中,使用背景 1 - 想到的第一 ...

  10. 第十章 优先级队列 (b1)完全二叉堆:结构