题目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. Eclipse里的代码光标变成一个黑色块

    以前经常在编写程序是不知到碰到键盘上的那个键了,或是那几个组合键了,使得Eclipse里的代码光标变成一个黑色块:在这个状态下,光标不在活动自如,只能一直往后写代码,就不想平时的 " | & ...

  2. WEB常用前端开发调试工具介绍

    只要是设计开发,就需要进行调试,尽管相对来说,前端的调试要简单一些,但使用一些调试工具或插件还是能提高你的工作效率.下面是一些主要用于IE浏览器环境和Firefox浏览器环境等的调试工具简介. 一.I ...

  3. Linux下开启计划任务日志

    crontab记录日志 修改rsyslog vim /etc/rsyslog.d/50-default.conf (我的是root用户) 搜索cron 把如下行之前的注释"#"去掉 ...

  4. sql语句where条件判断是否是相同的string时 原来不判断大小写

    SELECT * from api_check where api ="Worker" SELECT * from api_check where api ="worke ...

  5. django 导入数据库

    python manage .py makemigrations appname python manage.py migrate

  6. 【Scheme】cons的过程性实现

    (define (cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y))) dispatch) (define (car z) (z ...

  7. Python3 round() 函数

    Python3 round() 函数  Python3 数字 描述 round() 方法返回浮点数x的四舍五入值. 语法 以下是 round() 方法的语法: round( x [, n] ) 参数 ...

  8. 我和struts2 的第一天

    文字解析 1.获取正文请求 2.根据请求做出判断 3.执行具体的方法代码 4.跳转页面,展示给用户 Strut 是Apache发行的MVC框架 他只是表现层的框架 Strut1 是2005年流行的框架 ...

  9. FZU-2150.FireGame.(BFS))

    本题大意:给出一个n * m的地,‘#’ 代表草, ‘.’代表陆地,每次选择这片地里的两片草,可选相等的草,选择的两片草初始状态为被燃状态,每一分钟被点燃的草会将身边的四连块点.问你需要对于给定的这片 ...

  10. TypeError: 无法设置未定义或 null 引用的属性“src” ——IE浏览器不兼容图片懒加载vueLazy

    异常分析: 谷歌浏览器访问正常,IE浏览器访问部分图片无法正常展示,查看控制台,输入如下错误信息: 经分析,只有使用过图片懒加载的地方图片展示才有问题,那么就应该是图片懒加载vue-lazyload这 ...