//
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=20;
struct A{ int x,y,z,w; }in[N];
int n,a,b,c,ans;
void dfs( int idx,int sumx,int sumy,int sumz,int sumw )
{
if( sumx>a || sumy>b || sumz>c ) return ;
if( idx>=n+1 )
{
ans=max( ans,sumw );
return ;
}
dfs( idx+1,sumx,sumy,sumz,sumw );
dfs( idx+1,sumx+in[idx].x,sumy+in[idx].y,sumz+in[idx].z,sumw+in[idx].w );
}
void solve()
{
scanf("%lld%lld%lld%lld",&n,&a,&b,&c );
for( int i=1;i<=n;i++ )
{
int x,y,z,w;
scanf("%lld%lld%lld%lld",&x,&y,&z,&w );
in[i]=(A){ x,y,z,w };
}
dfs(1,0,0,0,0);
printf("%lld\n",ans );
}
signed main()
{
solve();
return 0;
}
作者 | 乐意奥AI
该篇文章介绍了如何使用C++中的深度优先搜索(DFS)算法解决一个与数组元素和整数限制相关的减肥问题。通过递归函数dfs,计算满足特定条件的结构A的权值最大值。
458

被折叠的 条评论
为什么被折叠?



