UVAlive 6560 - The Urge to Merge(状压dp)
LA 6560 - The Urge to Merge
option=com_onlinejudge&Itemid=8&page=show_problem&problem=4571" style="">题目链接
思路:状压dp,1表示要和下一个位置竖直乘。0表示不,这样递推下去就可以
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 1005;
const int INF = 0x3f3f3f3f; int g[N][3], dp[2][8], n; bool judge(int u, int f) {
for (int i = 0; i < 3; i++)
if (u&(1<<i) && f&(1<<i)) return false;
return true;
} int cal(int x, int u, int f) {
int ans = 0;
for (int i = 0; i < 3; i++) {
if (f&(1<<i))
ans += g[x][i] * g[x - 1][i];
}
int s = u|f;
int tmp1 = 0, tmp2 = 0;
if (!(s&1) && !(s&2)) tmp1 = g[x][0] * g[x][1];
if (!(s&2) && !(s&4)) tmp2 = g[x][1] * g[x][2];
ans += max(tmp1, tmp2);
return ans;
} int main() {
int cas = 0;
while (~scanf("%d", &n) && n) {
for (int i = 0; i < 3; i++)
for (int j = 1; j <= n; j++)
scanf("%d", &g[j][i]);
memset(dp[0], 0, sizeof(dp[0]));
int now = 0, pre = 1;
int ans = 0;
for (int i = 1; i <= n; i++) {
swap(now, pre);
memset(dp[now], 0, sizeof(dp[now]));
for (int j = 0; j < 8; j++) {
for (int k = 0; k < 8; k++) {
if (judge(j, k)) {
dp[now][j] = max(dp[now][j], dp[pre][k] + cal(i, j, k));
}
}
if (i == n) ans = max(ans, dp[now][j]);
}
}
printf("Case %d: %d\n", ++cas, ans);
}
return 0;
}
UVAlive 6560 - The Urge to Merge(状压dp)的更多相关文章
- UVALive - 4126 Password Suspects (AC自动机+状压dp)
给你m个字符串,让你构造一个字符串,包含所有的m个子串,问有多少种构造方法.如果答案不超过42,则按字典序输出所有可行解. 由于m很小,所以可以考虑状压. 首先对全部m个子串构造出AC自动机,每个节点 ...
- UVALive 6560 The Urge to Merge
题目链接:传送门 题目大意:有一个 3*n 的矩阵,每个格子里有一个数,你可以选择相邻的两个格子合并成一个,并且权值变为两数乘积,若一个数未合并,权值变为0,求最后权值总和最大值. 题目思路:以 2^ ...
- 状压DP uvalive 6560
// 状压DP uvalive 6560 // 题意:相邻格子之间可以合并,合并后的格子的值是之前两个格子的乘积,没有合并的为0,求最大价值 // 思路: // dp[i][j]:第i行j状态下的值 ...
- UVaLive 6625 Diagrams & Tableaux (状压DP 或者 DFS暴力)
题意:给一个的格子图,有 n 行单元格,每行有a[i]个格子,要求往格子中填1~m的数字,要求每个数字大于等于左边的数字,大于上边的数字,问有多少种填充方法. 析:感觉像个DP,但是不会啊...就想暴 ...
- 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 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- struts2拦截器(四)
struts2拦截器原理: 当请求action时,struts2会查找配置文件,并根据配置实例化相对的 拦截器对象,然后串成一个列表,然后一个一个的调用列表中的拦截器. 比如:某些页面必须登录才可以访 ...
- # --with-http_random_index_module模块
作用: 从目录中随机选取一个随机作为主业 环境 nginx -V 检测是否已经安装了该模块 语法 案例 在/usr/share/nginx下随机创建3个html文件 修改配置文件
- PL/SQL之基础篇
参考文献:<Oracle完全学习手册>第11章 1.PL/SQL概述 PL/SQL(Procedure Language/Structuer Query Language)是Oracle对 ...
- MSCRM4 在过滤后的LOOKUP框中实现查找
在MSCRM中让Lookup根据一定的条件实现过滤功能, 这个需求很常见, 在我接触的诸多项目中似乎都需要有这个功能. 但非常遗憾是, MSCRM 的SDK并没有提供实现这个功能的方法. 不过我们应该 ...
- dubbo之本地调用
本地调用 本地调用使用了 injvm 协议,是一个伪协议,它不开启端口,不发起远程调用,只在 JVM 内直接关联,但执行 Dubbo 的 Filter 链. 配置 定义 injvm 协议 <du ...
- node.js的querystring模块
querystring主要是用于对字符串进行操作和解析.共有四个方法:querystring.parse,querystring.stringify,querystring.escape,querys ...
- vue遇到的大坑,h5在ios10版本下不能打开页面
无论是谁,在做事情的过程中总是会遇到学坑,才能成为最后的大神 这个坑不说了,找了半天.希望能帮助到你们 进入build文件夹: 找到webpack.prod.conf.js文件: 在UglifyPlu ...
- ApplicationLoader登录失败
报错:Please sign in with an app-specific password. You can create one at appleid.apple.com 是因为帐号开启了双重认 ...
- 三种“BIOS设置光驱第一启动的图解”
除特殊机器类型一般都是“开机按DEL进入BIOS界面,当然还有AMD主板有按F2的进入” 第一种.AWARD BIOS设置光驱启动方法: 进入Bios界面,选第二项——>回车 选中此项,按PAG ...
- android全屏下的输入框未跟随软键盘弹起问题
最近开发中遇到,全屏模式下输入框在底部不会跟随软键盘弹起.于是网上搜索了解决的方案.大致找到了两种方案. 第一种 定义好此类 public class SoftKeyBoardListener { p ...