nyoj832 合并游戏(状态压缩DP)
题意 :
n个石子, 给你一个n*n矩阵, A[i][j]表示第i个和第j个合并蹦出的金币值, 合并完石子 j 消失。求合并所有石子后,所得的最大金币数。
分析 :
1、 题中给的数据范围 n(1<=n<=10) 也就是说最多10个石子, 那么我们不妨用一个二进制串来表示合并的状态,1表示没被合并,0表示合并后消失了,例如 (1001)四个石子第2、3个被合并了。
2、 用d[x]来存储合并到x状态时,所得的最大金币数,例如 d[1001] 表示合并2 , 3 后所得的最大金币数。
3、 我们从开始状态开始搜索(例如4个石子:1111), 枚举合并1个石子后的所以状态 (1110, 1101, 1011, 0111), 再继续往下一状态求, 1110下一状 态:(0110, 1010, 1100 ), 1101 —>(1100, 1001, 0101) , 1011 —> (1010, 1001, 0011) , 0111 —> (0110, 0101, 0011), 继续往下一状态求 ……….. 用递归不断求下一状态。
1110有3种合并方法, 可以由1111中的最后一石子与前三个石子任何一个合并而来。
注意:细心会发现 1110, 1101, 1011, 0111 他们的下一状态有重复的, 所以边搜边标记, 才不会做多余的工作。
#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
using namespace std; int n, a[][], d[];
int dp(int x)
{
if(d[x] != -) return d[x];//搜过的状态要标记, 这要注意!! 不写的话会超时
int Mx = ;
if(x == ) return ;
for(int i = ; i < n; i++)
{
int mx = ;
if(x & ( << i))//枚举所有可以合并的石子, 第i+1个
{
int tem = x - ( << i);//合并完的状态,
for(int j = ; j < n; j++)
{
if(tem & ( << j))//枚举所有可以与第i+1个石子合并的石子, 求出最大的
mx = max(a[+j][i+], mx);
}
Mx = max(Mx, dp(tem) + mx);
}
}
d[x] = Mx;
return d[x];
}
int main()
{
while(scanf("%d", &n) != EOF)
{
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
scanf("%d", &a[i][j]);
memset(d, -, sizeof(d));
int ans = dp(( << n) - );
printf("%d\n", ans);
}
return ;
}
nyoj832 合并游戏(状态压缩DP)的更多相关文章
- [转]状态压缩dp(状压dp)
状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...
- [NOIP2016]愤怒的小鸟 状态压缩dp
题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形 ...
- BZOJ1294 洛谷P2566 状态压缩DP 围豆豆
传送门 题目描述 是不是平时在手机里玩吃豆豆游戏玩腻了呢?最近MOKIA手机上推出了一种新的围豆豆游戏,大家一起来试一试吧游戏的规则非常简单,在一个N×M的矩阵方格内分布着D颗豆子,每颗豆有不同的分值 ...
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
- 状态压缩dp问题
问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...
- BZOJ-1226 学校食堂Dining 状态压缩DP
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...
随机推荐
- MVC中的@Html.DisplayFor等方法如何控制日期的显示格式(转)
http://www.tuicool.com/articles/BNVBR3 在Sql Server2005中,如果将某字段定义成日期 时间 类型DateTime,那么在视图中会默认显示成年月日时分秒 ...
- InstallShield 一些事件说明
InstallShield 一些事件说明,和常量代码 大家可以把所有事件都点出来然后单步追踪就行了,我的经验是一般是从OnShowUI第一次显示UI界面开始,很容易就找到大家想处理的事件,另贴几个我发 ...
- 知识面 z
http://blog.csdn.net/sxhelijian/article/details/23163683 有了较宽和知识面,面对复试中不知道的问题,回答可以是:“这个问题,直接回答我没有把握, ...
- IIS里面网站停止了,不能启动
IIS里面网站文件夹显示红色的叉叉,停止了,不能启动,所有站点都停止了: 原来是Word wide web publish service 服务停止了,启动就好了
- [Raobin] Ext.net在多重子父窗体中找到当前窗体的父窗体,并关闭IFrame父窗体
var closeParentWindow = function () { var currentWin = window; while (top != currentWin) { var prent ...
- asp.net的运行内幕
每当浏览器向IIS发送一个页面请求的时候,相应的网页就会被编译成DLL文件,然后由JIT来运行这个DLL文件,最后将运行结果发送给客户端.一旦网页发送了变化,下次再请求页面的话,网页又会被重新被编译成 ...
- normalization归一化
简单的举个例子:一张表有两个变量,一个是体重kg,一个是身高cm.假设一般情况下体重这个变量均值为60(kg),身高均值为170(cm).1,这两个变量对应的单位不一样,同样是100,对于身高来说很矮 ...
- $1200元 设计数据挖掘模型及对应RESTful Web Service
利用MongoDB和NodeJS/Java设计数据挖掘模型以及对应的RESTful Web Service.要求:1. 精通MongoDB集群的配置2. 精通MongoDB Sehll的使用3. 精通 ...
- PC-如何禁用 Cookie
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* if (string.IsNullOrEmpty(TextBox2.Text) || TextBox2.Tex ...
- maven工程-eclipse红叹号
从公司代码库中check下一份完整代码,在其他开发机器上都能正确构建,唯独一台机器无法正确构建,查证了2个小时,最后还是死在了最基础的问题上 maven工程 工程如下,创建了一个新的maven工程,j ...