社区讨论

大佬快进来看看

学术版参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi7dvxls
此快照首次捕获于
2025/11/20 20:04
4 个月前
此快照最后确认于
2025/11/20 20:04
4 个月前
查看原帖
求大佬帮忙看看为什么换了个名字就错了。

题目:Free Candies

未AC代码

CPP
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<cstring>
#define maxn 41
using namespace std;
int n,l[5],dp[maxn][maxn][maxn][maxn],f[maxn][5];
int dfs(int Q,int num)
{   
    if(dp[l[0]][l[1]][l[2]][l[3]]!=-1)
    return dp[l[0]][l[1]][l[2]][l[3]];      
    if((l[0]==n&&l[1]==n&&l[2]==n&&l[3]==n)||num==5) return dp[l[0]][l[1]][l[2]][l[3]]=0;
    for(int i=0;i<4;i++)    
    {
        if(l[i]<n) 
        {
        int j=1<<f[l[i]][i];
        l[i]++;
        if(j&Q)dp[l[0]][l[1]][l[2]][l[3]]=max(dp[l[0]][l[1]][l[2]][l[3]],dfs(Q-j,num-1)+1);
        else if(num<5)dp[l[0]][l[1]][l[2]][l[3]]=max(dp[l[0]][l[1]][l[2]][l[3]],dfs(Q+j,num+1)); 
        l[i]--;
        }
    } 
     return dp[l[0]][l[1]][l[2]][l[3]];
} 
int main()
{
    while(cin>>n)
    {
        if(n==0)break;
        memset(dp,-1,sizeof dp);
        memset(l,0,sizeof l);
        for(int i=0;i<n;i++)
            for(int j=0;j<4;j++)
            cin>>f[i][j];
        cout<<dfs(0,0)<<endl;
    }
}


AC代码

CPP
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<cstring>
#define maxn 41
using namespace std;
int n,l[5],dp[maxn][maxn][maxn][maxn],f[maxn][5];
int dfs(int Q,int num)
{   
	int &now=dp[l[0]][l[1]][l[2]][l[3]];
    if(now!=-1)
    return now;      
    if((l[0]==n&&l[1]==n&&l[2]==n&&l[3]==n)||num==5) return now=0;
    for(int i=0;i<4;i++)    
    {
        if(l[i]<n) 
        {
        int j=1<<f[l[i]][i];
        l[i]++;
        if(j&Q)now=max(now,dfs(Q-j,num-1)+1);
        else if(num<5)now=max(now,dfs(Q+j,num+1)); 
        l[i]--;
        }
    } 
     return now;
} 
int main()
{
    while(1)
    {
    	cin>>n;
        if(n==0)break;
        memset(dp,-1,sizeof dp);
        memset(l,0,sizeof l);
        for(int i=0;i<n;i++)
            for(int j=0;j<4;j++)
            cin>>f[i][j];
        cout<<dfs(0,0)<<endl;
    }
}

回复

3 条回复,欢迎继续交流。

正在加载回复...