菜狗求助
查看原帖
菜狗求助
531776
LYM20114楼主2022/8/1 11:41

WA on #4,86分

#include <iostream>
#include <cstring>
using namespace std;
int T,W;
int t[1005];
int f[1005][35][5];
int dp(int N,int k,int now){
	if(N == T + 1)
		return 0;
	if(k > W)
		return int(-1e9);
	if(f[N][k][now] >= 0) return f[N][k][now]; 
	if(now == 1){
		int x = 0,y = 0;//x为当前走的最大值,y为不走的最大值
		if(t[N] == 1){
			x = dp(N + 1,k,1) + 1;
			y = dp(N + 1,k + 1,2);
		}
		else if(t[N] == 2) {
			x = dp(N + 1,k,1);
			y = dp(N + 1,k + 1,2) + 1;
		}
		return f[N][k][now] = max(x,y);
	}
	else if(now == 2){
		int x1 = 0,y1 = 0;
		if(t[N] == 1){
			x1 = dp(N + 1,k + 1,1) + 1;
			y1 = dp(N + 1,k,2);
		}
		else if(t[N] == 2) {
			x1 = dp(N + 1,k + 1,1);
			y1 = dp(N + 1,k,2) + 1;
		}
		return f[N][k][now] = max(x1,y1);
	}
}
int main(){
	memset(f,-2,sizeof f);
	cin >> T >> W;
	for(int i = 1;i <= T;i++)
		cin >> t[i];
	cout << dp(1,0,1);
	return 0;
}
2022/8/1 11:41
加载中...