[CF1176F] Destroy it!

题目链接

Solution

每一轮中,值为 $1$ 的卡只需要保留伤害最高的三张,值为 $2$ 的一张,值为 $3$ 的一张,所以最多 $5$ 张卡。然后设 $dp[i][j]$ 表示第 $i$ 轮已经打出了模 $10$ 余 $j$ 张卡的最大伤害值,转移时分类讨论即可。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include<algorithm>
#include<cstring>
#include<cstdio>

using namespace std;

typedef long long LL;

const int N = 200005;

int n, k;
LL dp[N][20], ans;
struct Card{
int cost; LL dam;
bool operator < (const Card &A) const{
return cost == A.cost ? dam > A.dam : cost < A.cost;
}
}c[N][10], t[N];

inline int MOD(int x){ return (x % 10 + 10) % 10; }

int main(){
scanf("%d", &n);
memset(dp, -0x7f, sizeof dp);
dp[0][0] = 0;
for(int i = 1; i <= n; i++){
scanf("%d", &k);
for(int j = 1; j <= k; j++) {
scanf("%d%lld", &t[j].cost, &t[j].dam);
}
sort(t+1, t+k+1);
int cnt1 = 0, cnt2 = 0, cnt3 = 0;
for(int j = 1; j <= k; j++){
if(t[j].cost == 1 && cnt1 < 3) c[i][++cnt1] = t[j];
else if(t[j].cost == 2 && !cnt2) cnt2++, c[i][4] = t[j];
else if(t[j].cost == 3 && !cnt3) cnt3++, c[i][5] = t[j];
}
for(int j = 0; j < 10; j++){
dp[i][j] = dp[i-1][j];
if(c[i][5].cost == 3)
dp[i][j] = max(dp[i][j], dp[i-1][MOD(j-1)] + c[i][5].dam + (j == 0 ? c[i][5].dam : 0));
if(c[i][4].cost == 2)
dp[i][j] = max(dp[i][j], dp[i-1][MOD(j-1)] + c[i][4].dam + (j == 0 ? c[i][4].dam : 0));
if(c[i][4].cost == 2 && c[i][1].cost == 1)
dp[i][j] = max(dp[i][j], dp[i-1][MOD(j-2)] + c[i][4].dam + c[i][1].dam + (j < 2 ? max(c[i][1].dam, c[i][4].dam) : 0));
if(c[i][1].cost == 1)
dp[i][j] = max(dp[i][j], dp[i-1][MOD(j-1)] + c[i][1].dam + (j == 0 ? c[i][1].dam : 0));
if(c[i][2].cost == 1)
dp[i][j] = max(dp[i][j], dp[i-1][MOD(j-2)] + c[i][1].dam + c[i][2].dam + (j < 2 ? c[i][1].dam : 0));
if(c[i][3].cost == 1)
dp[i][j] = max(dp[i][j], dp[i-1][MOD(j-3)] + c[i][1].dam + c[i][2].dam + c[i][3].dam + (j < 3 ? c[i][1].dam : 0));
}
}
for(int j = 0; j < 10; j++) ans = max(ans, dp[n][j]);
printf("%lld\n", ans);
return 0;
}
作者

xyfJASON

发布于

2020-02-28

更新于

2021-02-25

许可协议

评论