比赛 |
NOIP2008集训模拟4 |
评测结果 |
AAAAAAAAAA |
题目名称 |
灵魂分流药剂 |
最终得分 |
100 |
用户昵称 |
zqzas |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2008-11-13 11:14:39 |
显示代码纯文本
#include <iostream>
#define MAXN 15
#define MAXV 111
using namespace std;
int n,ans,v1,v2,c1[MAXN][110],c2[MAXN][110],w[MAXN][110],box[MAXN],f[MAXN][MAXV][MAXV];
void run()
{
int i,j,k,p,max;
for (k=1;k<=n;k++)
for (i=0;i<=v1;i++)
for (j=0;j<=v2;j++)
{
//不放
max=f[k-1][i][j];
//放一个
for (p=1;p<=box[k];p++)
{
if (i-c1[k][p]>=0 && j-c2[k][p]>=0)
if (f[k-1][i-c1[k][p]][j-c2[k][p]]+w[k][p]>max)
max=f[k-1][i-c1[k][p]][j-c2[k][p]]+w[k][p];
}
f[k][i][j]=max;
}
ans=0;
for (i=0;i<=v1;i++)
for (j=0;j<=v2;j++)
if (f[n][i][j]>ans)
ans=f[n][i][j];
}
void ini()
{
int i,u,a,b,c,d,p;
scanf("%d%d%d%d",&u,&n,&v1,&v2);
for (i=1;i<=u;i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
p=++box[c];
c1[c][p]=a;
c2[c][p]=b;
w[c][p]=d;
}
}
int main()
{
freopen("soultap.in","r",stdin);
freopen("soultap.out","w",stdout);
ini();
run();
printf("%d",ans);
return 0;
}