魔法战争

魔法战争

题目描述

六十年一次的魔法战争就要开始了,大魔法师准备从布置的魔法场中
汲取魔法能量。
      魔法场中有一排魔灯,编号分别为12...,n,大魔法师
      可以通过点亮魔灯来增强自己的魔法能量。大魔法师注意到,
在每点亮一盏魔灯时,魔灯能够提供的魔法能量与相邻的魔灯是否点
亮有关。大魔法师知道每盏魔灯在有两盏相邻的魔灯点
亮,一盏相邻的魔灯点亮,和没有相邻的魔灯点亮的情况下,他点亮
该盏魔灯所能获得的魔法能量。编号为1和n的魔灯分别
没有左侧和右侧(也就是说,编号为1和n的魔灯不会出现有两盏相邻的
魔灯点亮的情况)。
      魔法能量的多少决定了大魔法师在魔法战争中的战斗力,请你
      帮助大魔法师计算他最多可以从魔法阵中获得多少魔法能
量。

输入

第一行一个正整数n,表示魔灯的数量。
      接下来一共n行,每行包括三个用空格隔开的整数ai,bi,ci,
      分别表示在有两盏相邻的魔灯点亮,一盏相邻的魔灯点亮,
和没有相邻的魔灯点亮的情况下,他点亮该盏魔灯所能获得的魔
法能量。
数据范围:1<=n<=2000  0<=ai,bi,ci<=100000

输出

一个整数,表示大魔法师最多可以从魔法阵中获得的魔法能量。

样例输入

【样例输入1】

2
1 1 3
1 2 2

【样例输入2】

3
1 1 3
1 2 4
1 2 4

样例输出

【样例输出1】

3

【样例输出2】

6

题解:

我们可以发现每盏魔灯获得的魔法能量只与相邻魔灯的点亮数量有关,于是考虑对该问题进行动态规划求解,我们
可以用二维数组来表示状态,

  • dp[i][0]表示前i-1盏魔灯在先不点亮i-1这盏魔灯的情况下所能获得的最大能量,
  • dp[i][1]表示前i-1盏魔灯在先点亮i-1这盏魔灯的情况下所能获得的最大能量,

状态转移方程
dp[i][0]=max(dp[i-1][0]+b[i-1],dp[i-1][1]+c[i-1]);
dp[i][1]=max(dp[i-1][0]+a[i-1],dp[i-1][1]+b[i-1]);

dp[n+1][0]即为所能获得的最大能量,时间复杂度为O(n*2)
【本博客无Code】

AC

你可能感兴趣的:(魔法战争)