[DP][RQNOJ 3822]选择题

描述

众所周知,如果一个函数在区间内可导,他必定连续。所以他想连续的图选择题,即对于第i个选择题,他只能涂与i-1相同的答案或者是i-1道选择题上一个活下一个选择题(第i-1道题涂了A,第i道只能涂A,B;第i-1道题涂了B,第i道只能涂A,B,C;第i-1道题涂了C,第i道只能涂B,C,D;第i-1道题涂了D,第i道只能涂C,D)。他已经知道了选择题答案,求他能获得的最大分数。注意每道题都一个不同的分数.

输入格式

首先输入一个数n表示一共有n个选择题。

以下共有n行,第i+1行共有一个ai字符和一个数字ci表示分别第i道选择题的答案和分数。

输出格式

输出一个数字,表示按照给定要求最多能够拿到的最大分数。

输入

8
B 1
A 4
B 1
C 1
D 9
C 1
C 9
D 7

输出

33

备注

ai属于{A,B,C,D}
0< ci<=10
对于25%的数据0< n<=5000
对于50%的数据0< n<=10000
对于100%的数据0< n<=500000

var
 w,dp:array[0..500000,1..4]of longint;
 n,l:longint;
 i,j,k:longint;
 t:char;
function max(a,b:longint):longint;
begin
 if a>b
 then exit(a)
 else exit(b);
end;

begin
 readln(n);
 for i:=1 to n do
  begin
   readln(t,l);
   case t of
   'A':w[i,1]:=l;
   'B':w[i,2]:=l;
   'C':w[i,3]:=l;
   'D':w[i,4]:=l;
   end;
  end;
 for i:=1 to n do
  begin
   dp[i,1]:=max(dp[i-1,1],dp[i-1,2])+w[i,1];
   dp[i,2]:=max(max(dp[i-1,1],dp[i-1,2]),dp[i-1,3])+w[i,2];
   dp[i,3]:=max(max(dp[ i-1,2],dp[i-1,3]),dp[i-1,4])+w[i,3];
   dp[i,4]:=max(dp[i-1,3],dp[i-1,4])+w[i,4];
  end;
 writeln(max(max(max(dp[n,1],dp[n,2]),dp[n,3]),dp[n,4]));
end.

你可能感兴趣的:([DP][RQNOJ 3822]选择题)