社区讨论
大佬快进来看看
学术版参与者 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 条回复,欢迎继续交流。
正在加载回复...