本地能过but第一个点RE?(求改QWQ)
查看原帖
本地能过but第一个点RE?(求改QWQ)
590675
A1ex_5yn7ax楼主2025/1/14 09:11
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000]={};
int dp[50][50][50][50]={};
int t[100]={};
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=m;i++){
    	int k=0;
    	cin>>k;
    	t[k]++;
	}
	if(t[1]>0&&n>1); dp[t[1]-1][t[2]][t[3]][t[4]]=a[2];
	if(t[2]>0&&n>2); dp[t[1]][t[2]-1][t[3]][t[4]]=a[3];
	if(t[3]>0&&n>3); dp[t[1]][t[2]][t[3]-1][t[4]]=a[4];
	if(t[4]>0&&n>4); dp[t[1]][t[2]][t[3]][t[4]-1]=a[5];
	dp[t[1]][t[2]][t[3]][t[4]]=a[1];
	for(int i=1;i<=50;i++){
		for(int t4=t[4];t4>=0;t4--){
		    for(int t3=t[3];t3>=0;t3--){
			    for(int t2=t[2];t2>=0;t2--){
			        for(int t1=t[1];t1>=0;t1--){
			        	if(t[1]-t1+(t[2]-t2)*2+(t[3]-t3)*3+(t[4]-t4)*4+1<=n){
			        		if(t1>=0) dp[t1][t2][t3][t4]=max(dp[t1][t2][t3][t4],dp[t1+1][t2][t3][t4]+a[t[1]-t1+(t[2]-t2)*2+(t[3]-t3)*3+(t[4]-t4)*4+1]);
			                if(t2>=0) dp[t1][t2][t3][t4]=max(dp[t1][t2][t3][t4],dp[t1][t2+1][t3][t4]+a[t[1]-t1+(t[2]-t2)*2+(t[3]-t3)*3+(t[4]-t4)*4+1]);
			                if(t3>=0) dp[t1][t2][t3][t4]=max(dp[t1][t2][t3][t4],dp[t1][t2][t3+1][t4]+a[t[1]-t1+(t[2]-t2)*2+(t[3]-t3)*3+(t[4]-t4)*4+1]);
			                if(t4>=0) dp[t1][t2][t3][t4]=max(dp[t1][t2][t3][t4],dp[t1][t2][t3][t4+1]+a[t[1]-t1+(t[2]-t2)*2+(t[3]-t3)*3+(t[4]-t4)*4+1]);
						}
			            
		            }
		        }
		    }
		}
	}
	cout<<dp[0][0][0][0];
    return 0;
}
2025/1/14 09:11
加载中...