不管怎么也查不出来错
查看原帖
不管怎么也查不出来错
727101
Jin_Yichen楼主2023/11/8 20:33
#include<iostream>
#include <climits>
using namespace std;
int n,m,x,dp[355];
int a[355],c[6];
bool check(int a,int b,int c,int d){
	return (a<0&&b<0&&c<0&&d<0);
}
int dfs(int id,int z1,int z2,int z3,int z4){
	if(id<=0||check(z1,z2,z3,z4))return 0;
	if(dp[id])return dp[id];
	int s1=dfs(id-1,z1-1,z2,z3,z4);
	int s2=dfs(id-2,z1,z2-1,z3,z4);
	int s3=dfs(id-3,z1,z2,z3-1,z4);
	int s4=dfs(id-4,z1,z2,z3,z4-1);
	dp[id]=max(max(s1,s2),max(s3,s4))+a[id];
	return dp[id];
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	for(int i=1;i<=m;i++){
		cin>>x;
		c[x]++;
	}dp[1]=a[1];
	dfs(n,c[1],c[2],c[3],c[4]);
	cout<<dp[n];
	return 0;
}

0分

2023/11/8 20:33
加载中...