求助
查看原帖
求助
241115
guzzqq楼主2021/7/15 21:28

请问这样为啥不行

#include<bits/stdc++.h>
#define size1 355
#define size2 125
#define rep(i, a, b) for(register int i = a; i <= b; i++)
using namespace std;
int n, m, card[size2], num[size1];
int dp[size1][5][size2];//到了i位置,上一次用的是j卡牌,已经用了k次
int cnt[5];
int main(){
	scanf("%d%d",&n, &m);
	rep(i, 1, n)scanf("%d",&num[i]);
	rep(i, 1, m)scanf("%d",&card[i]), cnt[card[i]]++;
	rep(i, 1, 4)
		dp[1][i][0] = num[1];
	
	rep(i, 1, n)
		rep(j, 1, 4)
			if(cnt[j])
				rep(k, 1, cnt[j])
					if(i - j > 0){
						dp[i][j][k] = max(dp[i - j][j][k - 1] + num[i], dp[i][j][k]);	
					}
						
	int ans = 0;	
	rep(i, 1, 4)
		rep(j, 1, cnt[i])
			ans = max(ans, dp[n][i][j]);
	printf("%d",ans);
	return 0;
}
	

2021/7/15 21:28
加载中...