poj 2288 Islands and Bridges ——状压DP
题目:http://poj.org/problem?id=2288
状压挺明显的;
一开始写了(记忆化)搜索,但一直T;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const inf=0x3f3f3f3f;
int T,n,m,v[];
ll ans,cnt,f[<<];
bool mp[][];
void dfs(int z,int x,int y,ll w)
{
if(w<f[z])return;
f[z]=w;
if(z==(<<n)-)
{
if(w>ans)ans=w,cnt=;
else if(w==ans)cnt++;
return;
}
for(int i=;i<=n;i++)
if((z&(<<(i-)))==)
dfs(z|(<<(i-)),y,i,w+v[i]+v[y]*v[i]+(mp[x][i]?v[x]*v[y]*v[i]:));
}
int main()
{
scanf("%d",&T);
while(T--)
{
memset(f,,sizeof f);
memset(mp,,sizeof mp);
ans=-inf; cnt=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&v[i]);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
mp[x][y]=; mp[y][x]=;
}
dfs(,,,);
if(cnt==)printf("0 0\n");
else printf("%lld %lld\n",ans,cnt/);
}
return ;
}
囧
于是改成刷表,注意点细节就行了。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const inf=0x3f3f3f3f;
int T,n,m,v[];
ll ans,cnt,f[<<|][][],s[<<|][][];
bool mp[][];
void dp()
{
memset(f,-,sizeof f);
memset(s,,sizeof s);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) if(mp[i][j])
{
int p=((<<(i-))|(<<(j-)));
f[p][i][j]=v[i]+v[j]+v[i]*v[j]; s[p][i][j]=;
}
for(int p=;p<(<<n);p++)
for(int i=;i<=n;i++) if(!(p&(<<(i-))))
for(int j=;j<=n;j++) if(p&(<<(j-)))
for(int k=;k<=n;k++) if((p&(<<(k-)))&&j!=k&&mp[i][k]&&f[p][j][k]!=-)
{
ll tmp=f[p][j][k]+v[i]+v[k]*v[i]+(mp[j][i]?v[j]*v[k]*v[i]:);
int tp=(p|(<<(i-)));
if(tmp>f[tp][k][i]) f[tp][k][i]=tmp,s[tp][k][i]=s[p][j][k];
else if(tmp==f[tp][k][i])s[tp][k][i]+=s[p][j][k];
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
memset(mp,,sizeof mp);
ans=-inf; cnt=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&v[i]);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
mp[x][y]=; mp[y][x]=;
}
if(n==){printf("%d %d\n",v[],); continue;}//
dp(); int mx=(<<n)-;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) if(i!=j)
{
if(f[mx][i][j]==ans)cnt+=s[mx][i][j];
else if(f[mx][i][j]>ans)ans=f[mx][i][j],cnt=s[mx][i][j];
}
if(cnt==)printf("0 0\n");//
else printf("%I64d %I64d\n",ans,cnt/);//
}
return ;
}
poj 2288 Islands and Bridges ——状压DP的更多相关文章
- poj 2288 Islands and Bridges——状压dp(哈密尔顿回路)
题目:http://poj.org/problem?id=2288 不知为什么记忆化搜索就是WA得不得了! #include<iostream> #include<cstdio> ...
- [poj2288] Islands and Bridges (状压dp)
Description Given a map of islands and bridges that connect these islands, a Hamilton path, as we al ...
- POJ 1185 炮兵阵地(状压DP)
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26426 Accepted: 10185 Descriptio ...
- POJ 2411 Mondriaan's Dream -- 状压DP
题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...
- POJ 2411 Mondriaan's Dream ——状压DP 插头DP
[题目分析] 用1*2的牌铺满n*m的格子. 刚开始用到动规想写一个n*m*2^m,写了半天才知道会有重复的情况. So Sad. 然后想到数据范围这么小,爆搜好了.于是把每一种状态对应的转移都搜了出 ...
- 【POJ 2923】Relocation(状压DP+DP)
题意是给你n个物品,每次两辆车运,容量分别是c1,c2,求最少运送次数.好像不是很好想,我看了网上的题解才做出来.先用状压DP计算i状态下,第一辆可以运送的重量,用该状态的重量总和-第一辆可以运送的, ...
- POJ 1185 炮兵阵地 (状压DP)
题目链接 题意 : 中文题不详述. 思路 :状压DP,1表示该位置放炮弹,0表示不放.dp[i][j][k],代表第 i 行的状态为k时第i-1行的状态为 j 时放置的最大炮弹数.只是注意判断的时候不 ...
- 动态规划晋级——POJ 3254 Corn Fields【状压DP】
转载请注明出处:http://blog.csdn.net/a1dark 分析:刚开始学状压DP比较困难.多看看就发现其实也没有想象中那么难.这道题由于列数较小.所以将行压缩成二进制来看.首先处理第一行 ...
- POJ 1185 炮兵阵地 【状压DP】
<题目链接> 题目大意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...
随机推荐
- 移动web——bootstrap栅格系统
基本简介 1.Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列 2.栅格系统用于通过一系列的行(row)与列(c ...
- Ubuntu 关闭guest用户
Ubuntu 关闭guest用户 ca0gu0@ub:~$ cat /etc/lightdm/lightdm.conf [SeatDefaults]autologin-user=falseallow- ...
- Zabbix 默认网络发现模板修改(第三篇)
zabbix 默认网络发现模板不能显示ip,我想让他在graph的标题上显示ip,具体要像如下效果 原文地址:http://www.cnblogs.com/caoguo/p/4977254.html ...
- HDU_1063_Exponentiation_大数
Exponentiation Time Limit: 2000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- vue04 组件化开发 Vue自动化工具
5. 组件化开发 5.1 组件[component] 组件(Component)是自定义封装的功能.在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的网站之间,也存在同样的功能. 而在网 ...
- eclipse常用设置之自动格式化
Eclipse 保存文件时自动格式化代码 很多同学不知道Eclipse有个很有用的功能,就是自动格式源代码的功能,一般大家都是直接Ctrl+Shift+F手动格式化,多浪费时间. 其实Eclips ...
- vue-cli3 中的环境变量
官方文档是这样写的: src同名文件夹下的建立 .env.[model] 配置文件 // mode:production development ... 载入的变量会对vue-cli-service ...
- Array.prototype.slice.call()的理解
最近在看廖雪峰的JS课程,浏览器中的操作DOM的那一章,有这样一道题. JavaScript Swift HTML ANSI C CSS DirectX <!-- HTML结构 --> & ...
- Python学习【第3篇】:Python之运算符
一.运算符 计算机可以进行的运算有很多种,不只是加减乘除,它和我们人脑一样,也可以做很多运算. 种类:算术运算,比较运算,逻辑运算,赋值运算,成员运算,身份运算,位运算,今天我们先了解前四个. 算术运 ...
- Spring 注解注入的几种方式(转)
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...