拯救莫莉斯 状压dp
题目大意:每个点有费用,要求选出花费最少的一些点,使得全部点都满足:他被选或与他相邻的任意点被选。
没看清数据范围233333
和翻格子游戏一样,考虑上中下三行,可行才能转移
f[i][j][k]表示到第i行i-1行状态为j,i行状态为k,且i行以前的所有行均满足条件
f[i][j][k]------>f[i+1][k][l] j|k|l|(k<<1)|(k>>1) 覆盖所有棋子
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 55
using namespace std;
int a[N][N],cost[N][257],f[N][257][257],g[N][257][257],ans,tot,n,m;
int bit[10];
int getnum(int x){
int nn=0;
while(x){nn+=x&1;x>>=1;}
return nn;
}
int main()
{
ans=0x7ffff; tot=0x7ffff;
memset(f,0x3f,sizeof f);
memset(g,0x3f,sizeof g);
bit[0]=1; for(int i=1;i<=8;i++)bit[i]=bit[i-1]<<1;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(int j=0;j<(1<<m);j++)
for(int k=1;k<=m;k++)
if(j&bit[k-1]) cost[i][j]+=a[i][k];
}
for(int i=0;i<(1<<m);i++){
f[1][0][i]=cost[1][i];
g[1][0][i]=getnum(i);
}
for(int i=2;i<=n;i++)
{
for(int j=0;j<(1<<m);j++)
for(int k=0;k<(1<<m);k++)
for(int l=0;l<(1<<m);l++){
if((((j)|(k)|(l)|(k<<1)|(k>>1))&(bit[m]-1))<(bit[m]-1))continue;
if((f[i-1][j][k]+cost[i][l]<f[i][k][l])||((f[i-1][j][k]+cost[i][l]==f[i][k][l])&&(g[i-1][j][k]+getnum(l)<g[i][k][l]))){
f[i][k][l]=f[i-1][j][k]+cost[i][l];
g[i][k][l]=g[i-1][j][k]+getnum(l);
}
}
if(i==n){
for(int j=0;j<(1<<m);j++)
for(int k=0;k<(1<<m);k++){
if((((j)|(k)|(k<<1)|(k>>1))&(bit[m]-1))<(bit[m]-1))continue;
if(f[i][j][k]<ans||(f[i][j][k]==ans&&g[i][j][k]<tot)){
ans=f[i][j][k];
tot=g[i][j][k];
}
}
}
}
printf("%d %d\n",tot,ans);
return 0;
}
拯救莫莉斯 状压dp的更多相关文章
- [GDOI2014]拯救莫莉斯 状压DP
题面: 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市( 1\le x\l ...
- [GDOI2014]拯救莫莉斯
题目描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市吗,两座城市间相邻 ...
- 拯救莫莉斯[GDOI2014]
时间限制:1s 内存限制:256MB 问题描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标 ...
- [ GDOI 2014 ] 拯救莫莉斯
\(\\\) \(Description\) 有一个 \(N\times M\) 的网格,每个格点都有权值,图是四连通的. 现在选择一个点集,使得每个格点要么被选中,要么连通的点之一被选中. 求这个点 ...
- 【[GDOI2014]拯救莫莉斯】
可能我的状态比较鬼畜,应该没有人这么写 设\(dp[i][j][k]\)表示在第\(i\)行,放置油库的状态为\(j\),实际上周围已经有油库或者本身有油库的状态为\(k\)的时候的最小花费 由于我们 ...
- luogu3888 GDOI2014拯救莫里斯 (状压dp)
题目描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市\(( 1\le ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
随机推荐
- c#实例化继承类,必须对被继承类的程序集做引用
0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Culture=neutral, PublicKeyTo ...
- IT轮子系列(三)——如何显示方法名——Swagger的使用(三)
前言 在上一篇文章IT轮子系列(三)——如何给返回类型添加注释——Swagger的使用(二) 介绍如何使用swashbuckle的时候忽略了一个问题,就是默认创建的API项目在生成文档的时候是没有显示 ...
- java并发包分析之———ConcurrentSkipListMap
一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSki ...
- Angular教程测试运行过程中产生的一些问题
主要问题就是最后一个HTTP Demo需要angular-in-memory-web-api模块: TS2307:Cannot find module 'angular-in-memory-web-a ...
- DDGScreenShot--iOS 图片处理--多图片拼接 (swift)
写在前面 最近总结了关于图片处理相关的内容,之前在二三四五工作的时候,也做过关于这方面的分享,图片的处理内容很多,会分很多模块来讲解. 今天简单讲多图片的拼接. 上代码 func composeIma ...
- 第二课:Hadoop集群环境配置
一.Yum配置 1.检查Yum是否安装 rpm -qa|grep yum 2.修改yum源,我使用的是163的镜像源(http://mirrors.163.com/),根据自己的系统选择源, #进入目 ...
- 有终将被编程潮流淹没的程序员,那是因为没学python人工智能吧?
2017年被称为中国人工智能元年--在两会时期,人工智能曾经成为国度计策,同时被写进当局报告.在从前的一年里,人工智能获得注重,已逐步浸透到别的行业,无人超市.主动驾驶.人脸识别.智能家居等" ...
- Python并发编程之创建多线程的几种方法(二)
大家好,并发编程 进入第二篇. 今天的内容会比较基础,主要是为了让新手也能无障碍地阅读,所以还是要再巩固下基础.学完了基础,你们也就能很顺畅地跟着我的思路理解以后的文章. 本文目录 学会使用函数创建多 ...
- DX11 Without DirectX SDK--03 渲染一个立方体
回到 DirectX11--使用Windows SDK来进行开发 一个立方体有8个顶点,然而绘制一个立方体需要画12个三角形,如果按照前面的方法绘制的话,则需要提供36个顶点,而且这里面的顶点数据会重 ...
- mysql workbench EER图,里面的实线以及虚线的关系
ERWin里面线代表实体间的三种关系:决定关系(Identifying Relationship),非决定关系(None-Identifying Relationship),多对多(Many-To-M ...