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的物品. 现在给出 ...
随机推荐
- nrm -- NPM registry 管理工具
https://cnodejs.org/topic/5326e78c434e04172c006826 cnpm:http://npm.taobao.org/
- centOS命令随笔记(杂):cd、pwd
1.向上向下翻页: 反向的命令一般是Shift-PageUp和Shift-PageDown. 每日一命令:cd 1.cd / 进入系统根目录 2.cd .. 进入系统根目录可以使用“ cd . ...
- bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏【Floyd】
先跑一遍取max版的Floyd,直接用数组回答询问即可 #include<iostream> #include<cstdio> using namespace std; con ...
- P2570 [ZJOI2010]贪吃的老鼠
传送门 →_→唯一一篇能看得懂的题解---->这里 很容易想到二分+网络流,然而并没有什么卵用--出题人的思路太神了-- 首先考虑如果一块奶酪在同一时间可以被多只老鼠吃的话,该如何建图.首先不难 ...
- 状态压缩+枚举 UVA 11464 Even Parity
题目传送门 /* 题意:求最少改变多少个0成1,使得每一个元素四周的和为偶数 状态压缩+枚举:枚举第一行的所有可能(1<<n),下一行完全能够由上一行递推出来,b数组保存该位置需要填什么 ...
- 题解报告:hdu 2717 Catch That Cow(bfs)
Problem Description Farmer John has been informed of the location of a fugitive cow and wants to cat ...
- Focusky的下载、安装、注册和使用(动画演示大师)
一.下载 二.安装 三.使用 四.注册 五.附录 非常感谢Focusky官方团队开发并提供实用的这么一款软件!!! 一.下载 http://www.focusky.com.cn/ 二.安装 三.使用 ...
- mysql之命令行导入导出
命令介绍 mysqldump:导出命令,在系统”命令提示符“窗口直接使用,如果提示没有此命令(前提是已经安装成功mysql),在环境变量中的path添加mysql,即path=D:\xxx\mysql ...
- Pycharm消除波浪线
PyCharm使用了较为严格的PEP8检查规则,稍微有点错误就会出现波浪线提示.那么怎么消除这些波浪线呢?一个简单粗暴的方法就是:在编辑器的右下角有个小人形状的按钮,点开之后有个滚动条,将滚动条滑动到 ...
- OC语言Block
OC语言Block 一.Block (一)简介 Block是什么?苹果推荐的比较特殊的数据类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. Block和 ...