版权声明:虽然本蒟蒻很菜,但各位dalao转载请注明出处谢谢。 https://blog.csdn.net/xuxiayang/article/details/89600838
给定 个东西,它们分为 组,要求每组只能选1个,最终选出的值 和 不能超过 和 ,求最大价值
数据范围?
弱得要死。。。
显然分组背包呀。。。
#include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
#define LL long long
using namespace std;
int f[101][101],n,m,A,B,v1[101],v2[101],p[101],a[11][101],zb;
inline LL read()
{
char c;int f=0,d=1;
while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;
while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;
return d*f;
}
signed main()
{
n=read();m=read();A=read();B=read();
for(register int i=1;i<=n;i++) v1[i]=read(),v2[i]=read(),zb=read(),a[zb][++a[zb][0]]=i,p[i]=read();
for(register int k=1;k<=m;k++)
for(register int V1=A;V1>=0;V1--)
for(register int V2=B;V2>=0;V2--)
for(register int i=1;i<=a[k][0];i++)
{
int tmp=a[k][i];
if(V1>=v1[tmp]&&V2>=v2[tmp])
f[V1][V2]=max(f[V1][V2],f[V1-v1[tmp]][V2-v2[tmp]]+p[tmp]);
}
printf("%d",f[A][B]);
}