显示代码纯文本
#include<cstdio>
#include<vector>
using namespace std;
const int maxn=110,maxm=11;
int n,m,a,b;
vector<int> K[maxm];
int costa[maxn],costb[maxn],belong[maxn],fff[maxn];
int f[maxn][maxn];
int drug[maxn][4];
int ans=-1,temp,num;
inline void in()
{
freopen("soultap.in","r",stdin);
freopen("soultap.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&a,&b);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d%d",&drug[i][1],&drug[i][2],&drug[i][3],&drug[i][4]);
K[drug[i][3]].push_back(i);
}
}
inline void dp()
{
for(int k=1;k<=m;k++)
{
for(int v1=b;v1>=0;v1--)
{
for(int v2=a;v2>=0;v2--)
{
for(int i=0;i<K[k].size();i++)
{
num=K[k][i];
if(v1<drug[num][1]||v2<drug[num][2]) continue;
int &x=f[v1][v2];
int y=f[v1-drug[num][1]][v2-drug[num][2]]+drug[num][4];
if(y>x) x=y;
}
}
}
}
}
inline void p()
{
printf("%d",f[a][b]);
}
int main()
{
in();
dp();
p();
return 0;
}