NYOJ 832 合并游戏
合并游戏
- 描述
- 大家都知道Yougth除了热爱编程之外,他还有一个爱好就是喜欢玩。某天在河边玩耍的时候,他发现了一种神奇的石子,当把两个石子放在一起的时候,后一个石子会消失,而且会蹦出一定数量的金币,这可乐坏了Yougth,但是他想得到最多的金币,他该怎么做?
- 输入
- 首先一行,一个n(1<=n<=10),表示有n个石子。接下来n*n的一个矩阵,Aij表示第i个和第j个合并蹦出的金币值(小于10000,注意合并后j会消失)。
- 输出
- 输出最多能得到的金币值。
- 样例输入
- 2
- 0 4
- 1 0
- 3
- 0 20 1
- 12 0 1
- 1 10 0
- 样例输出
- 4
- 22
- 来源
解题:在wdd的指导,终于搞定了!wdd,神dp啊!状压dp。。。
二进制1111表示还剩4个没有选,二进制1101表示还剩三个没选,1101可以由1111与另外三个合并转移而来。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
#include <vector>
#include <queue>
#include <cstdlib>
#include <string>
#include <set>
#include <stack>
#define LL long long
#define pii pair<int,int>
#define INF 0x3f3f3f3f
using namespace std;
int mp[][],n;
vector<int>g[];
bool vis[];
int dp[];
void init() {
int i,j,k,temp,v,u;
memset(vis,false,sizeof(vis));
for(i = ; i < ; i++) g[i].clear();
g[].push_back((<<n)-);
g[n].push_back();
vis[] = true;
vis[(<<n)-] = true;
for(i = ; i <= n; i++) {
for(j = ; j < g[i-].size(); j++) {
temp = g[i-][j];
for(k = ; k < n; k++) {
u = temp&(<<k);
if(u) {
v = temp^(<<k);
if(vis[v]) continue;
vis[v] = true;
g[i].push_back(v);
}
}
}
}
}
int go(int x){
char s[];
int pos[],m = ,i,j,y,theMax = ;
for(i = ; i < n; i++)
if(x&(<<i)) pos[m++] = i;
for(i = ; i < n; i++){
if((x&(<<i)) == ){
y = x^(<<i);
for(j = ; j < m; j++){
theMax = max(theMax,dp[y]+mp[pos[j]][i]);
}
}
}
return theMax;
}
int main() {
int i,j,ans;
while(~scanf("%d",&n)) {
init();
for(i = ; i < n; i++) {
for(j = ; j < n; j++)
scanf("%d",mp[i]+j);
}
memset(dp,,sizeof(dp));
for(i = ; i <= n; i++){
for(j = ; j < g[i].size(); j++){
dp[g[i][j]] = go(g[i][j]);
}
}
for(ans = i = ; i < g[n-].size(); i++)
ans = max(ans,dp[g[n-][i]]);
printf("%d\n",ans);
}
return ;
}
NYOJ 832 合并游戏的更多相关文章
- NYOJ 832 DP
		合并游戏 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 大家都知道Yougth除了热爱编程之外,他还有一个爱好就是喜欢玩. 某天在河边玩耍的时候,他发现了一种神奇的 ... 
- nyoj832    合并游戏(状态压缩DP)
		题意 : n个石子, 给你一个n*n矩阵, A[i][j]表示第i个和第j个合并蹦出的金币值, 合并完石子 j 消失.求合并所有石子后,所得的最大金币数. 分析 : 1. 题中给的数据范围 ... 
- NYOJ 石子合并(一)(区间DP)
		题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=737 题目大意: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆 ... 
- NYOJ 905 卡片游戏
		卡片游戏 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描写叙述 小明近期宅在家里无聊.于是他发明了一种有趣的游戏.游戏道具是N张叠在一起的卡片,每张卡片上都有一个数字,数字 ... 
- NYOJ 石子合并(一) 区间dp入门级别
		描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价 ... 
- 2048游戏_QT实现
		#ifndef GAMEWIDGET_H #define GAMEWIDGET_H #include <QWidget> #include <QMouseEvent> #inc ... 
- Cocos2d-html5入门之2048游戏
		一.介绍 Cocos2d-JS是Cocos2d-x的Javascript版本,它的前身是Cocos2d-html5.在3.0版本以前叫做Cocos2d-html5,从3.0版本开始叫做Cocos2d- ... 
- 区间DP小结
		也写了好几天的区间DP了,这里稍微总结一下(感觉还是不怎么会啊!). 但是多多少少也有了点感悟: 一.在有了一点思路之后,一定要先确定好dp数组的含义,不要模糊不清地就去写状态转移方程. 二.还么想好 ... 
- 2017 五一 清北学堂 Day1模拟考试结题报告
		预计分数:100+50+50 实际分数:5+50+100 =.= 多重背包 (backpack.cpp/c/pas) (1s/256M) 题目描述 提供一个背包,它最多能负载重量为W的物品. 现在给出 ... 
随机推荐
- java运行jdk连接mysql出现了:Establishing SSL connection without server's identity verification is not recommended
			注意:出现这类提示也不会影响对数据库的增删改查操作,所以不用紧张.. 在运行练习时出现下面的错误信息提示: Establishing SSL connection without server's i ... 
- Ruby on Rails5 直接的路径无效问题
			比如设置个背景 background = "../../assets/images/test1.jpg" 会发现无效 网上一翻,Rails里面直接指定无效. 解决方法就是把 ... 
- H5页面背景音乐,C33 360°旋转效果
			在做H5页面的时候,经常会需要用到背景音乐,比如电子贺卡.动态音乐相册等,右上角有个360°旋转的音乐图标,点击可以控制音乐是否播放,那这个效果是如何实现的呢?我现整理了一下代码: Demo 点击 ... 
- Android 性能优化(16)线程优化:Creating a Manager for Multiple Threads 如何创建一个线程池管理类
			Creating a Manager for Multiple Threads 1.You should also read Processes and Threads The previous le ... 
- Spring抽象JDBC,使用JdbcTemplate
			<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ... 
- E1963A/E6703B W-CDMA Online User's Guide
			官网资料地址: http://rfmw.em.keysight.com/rfcomms/refdocs/wcdma/ 
- Modbus消息帧
			两种传输模式中(ASCII和RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所以设备),判知何时 ... 
- 通信协议------Http、TCP、UDP
			CP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务. TCP HTTP UDP三者的关系: TCP/IP是个协议组, ... 
- sqlserver如何查询一个表的主键都是哪些表的外键
			select object_name(a.parent_object_id) 'tables' from sys.foreign_keys a where a.referenced_object_ ... 
- SqlBulkCopy实现大批量数据导入
			//自增列重新生成:SqlBulkCopy bc = new SqlBulkCopy(conn) //自增列保留原值:SqlBulkCopy bc = new SqlBulkCopy(conn,Sql ... 
