【问题描述】

炎炎夏日,如果没有一场大雨怎么才能尽兴?秋之国的人民准备了一场祈雨仪式。战斗机由于拥有操纵雷电的能力,所以也加入了其中,为此,她进行了一番准备。

战斗机需要给自己的Spear of Longinus灌注法力。Longinus的长度为n,战斗机为它制作了一个长度相等的灌注槽,因此这个灌注槽就被等分为了n段,每一段有两个增益值ai、bi。战斗机可以对每一段指定一个灌注的法力类型,每一段都有两种类型(A、B)可选,战斗机需要在灌注法力前确定好这n段所灌注的法力类型。由于仪式的需要,其中有m1段要强制选择A类法力,m2段要强制选择B类法力。

确定完每段所灌注的法力类型时,接下来就是法力灌注的过程。n段灌注槽中分别灌满了代表该段所选定法力类型的结晶,且一开始每段的法术强度都为0。每次战斗机需要合并相邻的两段成为新的一段,新的一段结晶的法术强度除了包括两段结晶的法术强度总和以外,还两段结晶两端处的结晶的法力类型有关,如果两段结晶左(右)端的法力类型相异,那么合并后的结晶的法术强度还要加上两段结晶左(右)端的a增益值之;如果两段结晶左(右)端的法力类型相同,那么合并后的结晶的法术强度还要加上两段结晶左(右)端的b增益值之。举个例子:

灌注槽的长度为n,所以一开始有n段结晶。战斗机要把它们合并成一整段结晶为Longinus灌注法术,她希望为祈雨仪式增光添彩,所以她希望找到一个灌注法力合并结晶的方案,使Spear of Longinus被灌注的法术强度尽可能大。

【数据范围】

对于10%的数据,n<=10;

对于50%的数据,m1,m2<=5;

对于另外20%的数据,m1+m2=n;

对于100%的数据,0<=m1,m2<=200,0<αi,βi<=n<=200,

0<αi,βi<=1000,保证ai,bi各不相同。

————————————————我是分割线————————————————

这道题目就是不断合并区间,取最大值并记录答案。并且有一些点我们可以随意取蓝或红。

这当然就是一道区间DP题,并且我们所得到的强制要取的m1+m2段就是将一些DP状态删除(设为-INF)

然后只要列出DP方程就好啦!

虽然这道题有7个for循环,但是不用担心,我们有注释QAQ

下面贴代码

#include <cstdio>
#include <algorithm>
#define MN 205
#define INF 0x2FFFFFFF
using namespace std;
int n,m1,m2,ans,bj[MN],a[][MN],f[MN][MN][][]; inline int read()
{
int n=,f=; char c=getchar();
while (c<'' || c>'') {if(c=='-')f=-; c=getchar();}
while (c>='' && c<='') {n=n*+c-''; c=getchar();}
return n*f;
} int main()
{
// freopen("lightning.in","r",stdin);
// freopen("lightning.out","w",stdout);
register int i,j,jl,jr,k,g1,g2,g3,g4;
n=read(); m1=read(); m2=read();
for (i=;i<=n;++i) bj[i]=;//初始化
while (m1--) bj[read()]=;//
while (m2--) bj[read()]=;//
for (i=;i<=n;++i) a[][i]=read(),a[][i]=read();//a,b两种增益
for (i=;i<=n;++i) f[i][i][][]=f[i][i][][]=-INF;//因为当只有一个点的时候不可能左边和右边不同
for (i=;i<=n;++i)
for (j=i;j<=n;++j)
{
if (bj[i]<) f[i][j][bj[i]^][]=f[i][j][bj[i]^][]=-INF;//同上
if (bj[j]<) f[i][j][][bj[j]^]=f[i][j][][bj[j]^]=-INF;
}
for (i=;i<n;++i)//枚举长度
for (jl=,jr=i+;jr<=n;++jl,++jr)//枚举相同长度的区间
for (g1=;g1<;++g1)//
for (g2=;g2<;++g2)//枚举区间2段的选取情况
if (f[jl][jr][g1][g2]!=-INF)
for (k=jl;k<jr;++k)//枚举断点
for (g3=;g3<;++g3)//枚举断点两端的选取情况
for (g4=;g4<;++g4)
f[jl][jr][g1][g2]=max(f[jl][jr][g1][g2],f[jl][k][g1][g3]+f[k+][jr][g4][g2]+a[g1^g4][jl]*a[g1^g4][k+]+a[g2^g3][jr]*a[g2^g3][k]);
for (g1=;g1<;++g1)
for (g2=;g2<;++g2) if (f[][n][g1][g2]!=-INF) ans=max(ans,f[][n][g1][g2]);
printf("%d",ans);
}

战斗机的祈雨仪式(NOIP模拟赛Round 7)的更多相关文章

  1. 水(NOIP模拟赛Round #10)

    题目描述: 小Z有一个长度为的数列.他有次令人窒息的操作,每次操作可以使某个数字或.他当然是希望这些数字的乘积尽量小了.为了简化题目,你只需输出操作完成后的数列即可. ———————————————— ...

  2. 小红帽的画笔(NOIP模拟赛Round 7)

    又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...

  3. YYH的营救计划(NOIP模拟赛Round 6)

    题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!YYH感动的热泪盈眶,开起了门…… YYH的父亲下班回家,街坊邻居说YYH被一群陌生人强行押上了警车!YYH的父 ...

  4. 题(NOIP模拟赛Round #10)

    题目描述: 有一张的地图,其中的地方是墙,的地方是路.有两种操作: 给出个地点,询问这个地点中活动空间最大的编号.若询问的位置是墙,则活动空间为:否则活动空间为询问地点通过四联通能到达的点的个数.如果 ...

  5. 大(NOIP模拟赛Round #10)

    题目描述: 小Z有个n个点的高清大图,每个点有且只有一条单向边的出边.现在你可以翻转其中的一些边,使他从任何一个点都不能通过一些道路走回这个点.为了方便,你只需输出方案数对取模即可.当在两个方案中有任 ...

  6. bananahill(NOIP模拟赛Round 8)

    题目描述 香蕉川由座香蕉山组成,第i座山有它的高度.小Z准备从左到右爬这里的恰好座香蕉山,但他不希望山的高度起伏太大,太过颠簸,会让本就体育不好的他过于劳累.所以他定义了爬山的劳累度是所有爬的相邻的两 ...

  7. 魔法使的烟花(NOIP模拟赛Round 7)

    [问题描述] 魔法森林里有很多蘑菇,魔法使常常采摘它们来制作魔法药水.为了在6月的那个奇妙的晚上用魔法绽放出最绚丽的烟花,魔法使决定对魔法森林进行一番彻底的勘探. 魔法森林分为n个区域,由n-1条长度 ...

  8. 灰姑娘的水晶鞋(NOIP模拟赛Round 7)

    [问题描述] 传说中的水晶鞋有两种颜色:左边的水晶鞋是红色,右边的是蓝色,据说穿上它们会有神奇的力量. 灰姑娘要找到她所有的n双水晶鞋,它们散落在一条数轴的正半轴上,坐标各不相同,每双水晶鞋还有一个权 ...

  9. YYH的球盒游戏(NOIP模拟赛Round 6)

    题目描述 YYH有一些总共有种颜色的球,他有颜色的球个.他同样有个盒子,第个盒子能放个球. 他的目标是把这个球按规则放进个盒子里: 对于一个盒子,对于每种颜色的球至多只能放个. 把颜色为的球放进盒子, ...

随机推荐

  1. POJ-3126 BFS,埃式筛选及黑科技

    题目大意:给定两个四位素数a  b,要求把a变换到b,变换的过程要保证  每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位不同,而且每步得到的 ...

  2. パラメータID一覧

    名称 内容 ABK 処理グループ. AUF 受注伝票タイプ. AVE FI:支払明細通知書のテンプレート登録. BAR 伝票タイプ. BNK 銀行コード. BUK 会社コード. CAC 管理領域. D ...

  3. [bzoj3450]Tyvj1952Easy

    瓜皮期望真是弱成渣.. 完全不理解的感觉qwq...题面%了一发千古神犇WJMZBMR哈~ Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化 ...

  4. 2 js的20/80关键知识

    1. 2 var a = 1; undefined a 1 alert(a); undefined var b = true; var c = "Hi"; undefined al ...

  5. 洛谷P1331 海战

    海战 题目链接 这还是一道联通块的题,只是需要判断是否存在以下四种情况: o. .o oo oo oo oo o. .o 如果存在就是Bad placement. 要注意标记以下,不然会出现多次输出B ...

  6. 安装macports

    Mac下面除了用dmg.pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样.MacPorts就像apt-get.yum一样,可以快速安装些软件 ...

  7. IIS 部署网站--浏览--“该页无法显示”

    解决办法: 打开IIS管理器--web站点(网站)--右键点击对应的站点--属性--主目录--执行权限改为(脚本和和执行文件) 点击“应用”--确定. 重启一下站点,OK.

  8. win7 64位如何共享XP上的打印机?

    这个问题看似很简单,但是一旦你遇到了,就会发觉不是想象的那么简单. 除了网上能搜到的一些设置之外,这里还有几个诀窍: 1.首先你必须准备你的打印机的64位驱动程序 2.你在win7上必须采用添加本地打 ...

  9. Python 3基础教程13-写入文件

    前面介绍了函数,这篇我们就利用Python 内构函数open来写入字符串到txt文件里. 直接看demo.py 这里有一个小问题,如果我要输入时中文到txt文件会报unicode错误,暂时没法解决.

  10. Java进制间的转换

    最近学习了Java间的进制转换,记录下自己的学习心得,希望可以帮到前来查看的朋友们,如果有不懂的地方可以在下方评论留言,我们一起学习进步,只有自己足够强大才能弥补不足,多学习, 任意进制到十进制的转换 ...