sdut-2725-The Urge to Merge-状压DP
把数组竖起来,从上往下走。
如果当前位置是竖着乘的,那么第一个点标记为1.否则标记为0.
样例最终的状态为:
0 0 1
0 1 0
1 0 0
0 0 0
#include<iostream>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
int maps[1010][11];
int dp[1010][11];
int pan(int x,int y)
{
int i;
for(i=0;i<3;i++)
{
int tt=(1<<i);
if((x&tt)&&(y&tt))return 0;
}
return 1;
}
int add(int x,int y,int z)
{
int ans=0;
int ss[4];
int i;
for(i=0;i<3;i++)
{
if(x&(1<<i))ss[i+1]=1;
else ss[i+1]=0;
}
for(i=0;i<3;i++)
{
if(y&(1<<i))
{
ans+=maps[z-1][i+1]*maps[z][i+1];
ss[i+1]=1;
}
}
int t1,t2;
t1=t2=0;
if(ss[1]==0&&ss[2]==0)t1=maps[z][1]*maps[z][2];
if(ss[2]==0&&ss[3]==0)t2=maps[z][2]*maps[z][3];
ans+=max(t1,t2);
return ans;
}
int main()
{
int i,j,k,n;
int cas=0;
while(~scanf("%d",&n)&n)
{
cas++;
memset(maps,0,sizeof(maps));
memset(dp,0,sizeof(dp));
for(i=1;i<=3;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&maps[j][i]);
}
}
for(i=1;i<=n;i++)
{
for(j=0;j<(1<<3);j++)
{
for(k=0;k<(1<<3);k++)
{
if(pan(j,k))
{
dp[i][j]=max(dp[i-1][k]+add(j,k,i),dp[i][j]);
}
}
}
}
int maxx=-1;
for(j=0;j<(1<<3);j++)
{
maxx=max(maxx,dp[n][j]);
}
printf("Case %d: ",cas);
cout<<maxx<<endl;
}
}
sdut-2725-The Urge to Merge-状压DP的更多相关文章
- UVAlive 6560 - The Urge to Merge(状压dp)
LA 6560 - The Urge to Merge option=com_onlinejudge&Itemid=8&page=show_problem&problem=45 ...
- 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 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
- 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP
[BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
随机推荐
- 《wc》-linux命令五分钟系列之十七
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 1、Python django 框架下的word Excel TXT Image 等文件的上传
1.文件上传(input标签) (1)html代码(form表单用post方法提交) <input class="btn btn-primary col-md-1" styl ...
- Python 关于正负无穷float(‘inf’)的一些用法
Python中可以用如下方式表示正负无穷: float("inf"), float("-inf") 利用 inf 做简单加.乘算术运算仍会得到 inf > ...
- PDF抽取文字 C# with Adobe API
前提是PDF里面是有文字的! 一次性取得所有页内容: /// <summary> /// 改进前取得所有页的所有word /// </summary> /// <para ...
- WPF 分页控件 WPF 多线程 BackgroundWorker
WPF 分页控件 WPF 多线程 BackgroundWorker 大家好,好久没有发表一篇像样的博客了,最近的开发实在头疼,很多东西无从下口,需求没完没了,更要命的是公司的开发从来不走正规流程啊, ...
- 虚拟机下linux上网
一.概述 1. 常见的上网方式 有以下两种: 桥接 NAT(推荐) 有关虚拟机几种不同联网方式的讲述,可以参考VMware网络选项分析 通常的配置步骤: <1> 配置PC端 <2&g ...
- 百度云推送 pem
1. p12证书导出 在钥匙串访问中选中推送证书,导出为个人信息交换文件(.p12格式). 选择文件格式.文件名和保存路径. 输入导出密码. 2. pem证书生成 将p12证书文件转换成pem证书文件 ...
- CALayer 为什么选择 cg 开头 而 不选择 UI 开头
CALayer 的属性 为什么选择 cg 开头 而 不选择 UI 开头 , 也就是说 为啥要选择 比如 .CGColor 等
- 内存管理tcmalloc
tcmalloc https://code.google.com/p/gperftools/
- bzoj 1006: [HNOI2008]神奇的国度 弦图的染色问题&&弦图的完美消除序列
1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1788 Solved: 775[Submit][Stat ...