1 条题解
-
0
可以用上记忆化搜索
#include<bits/stdc++.h> #define I return #define want 0 #define AC ; using namespace std AC const int N = 350 + 1,M = 40 + 1 AC int n, m, a[N], bi, b[5] AC short dp[M][M][M][M] AC int _AC(int ac, int b1, int b2, int b3, int b4){ if(dp[b1][b2][b3][b4]) return dp[b1][b2][b3][b4] AC int maxNext = 0 AC if(b1 > 0) maxNext = max(maxNext, _AC(ac+1, b1-1, b2, b3, b4)) AC if(b2 > 0) maxNext = max(maxNext, _AC(ac+2, b1, b2-1, b3, b4)) AC if(b3 > 0) maxNext = max(maxNext, _AC(ac+3, b1, b2, b3-1, b4)) AC if(b4 > 0) maxNext = max(maxNext, _AC(ac+4, b1, b2, b3, b4-1)) AC return dp[b1][b2][b3][b4] = a[ac] + maxNext AC } int main(){ scanf("%d %d", &n, &m) AC for(int i=1; i<=n; ++i) scanf("%d", &a[i]) AC for(int i=1; i<=m; ++i) scanf("%d", &bi), ++b[bi] AC printf("%d",_AC(1, b[1], b[2], b[3], b[4])) AC I want AC }
信息
- ID
- 460
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者