记录编号 |
49585 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
还是“金明的预算方案” |
最终得分 |
100 |
用户昵称 |
Truth.Cirno |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.762 s |
提交时间 |
2012-11-08 15:35:43 |
内存使用 |
3.96 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <memory.h>
using namespace std;
int weii[65],vall[65],to[65];
int numnofu,weinofu[65],valnofu[65];
int num,val[65][3210];
int numfu,limfu,weifu[65],valfu[65];
int f[3210];
int main(void)
{
freopen("budgetb.in","r",stdin);
freopen("budgetb.out","w",stdout);
int i,j,k,lim,n,s;
cin>>lim>>n>>s;
lim/=10;
for (i=1;i<=n;i++)
{
cin>>weii[i]>>vall[i]>>to[i];
vall[i]*=weii[i];
weii[i]/=10;
}
for (i=1;i<=n;i++)
if (to[i]==0)
{
numfu=0;
for (j=1;j<=n;j++)
if (to[j]==i)
{
numfu++;
weifu[numfu]=weii[j];
valfu[numfu]=vall[j];
}
if (numfu==0)
{
numnofu++;
weinofu[numnofu]=weii[i];
valnofu[numnofu]=vall[i];
continue;
}
limfu=lim-weii[i];
num++;
for (j=weii[i];j<=lim;j++)
val[num][j]=vall[i];
for (j=1;j<=numfu;j++)
for (k=limfu;k>=weifu[j];k--)
f[k]=max(f[k],f[k-weifu[j]]+valfu[j]);
for (j=weii[i],k=0;j<=lim;j++,k++)
val[num][j]+=f[k];
memset(f,0,sizeof(f));
}
for (i=1;i<=numnofu;i++)
for (j=lim;j>=weinofu[i];j--)
f[j]=max(f[j],f[j-weinofu[i]]+valnofu[i]);
for (i=1;i<=num;i++)
for (j=lim;j>=1;j--)
for (k=0;k<j;k++)
f[j]=max(f[j],f[k]+val[i][j-k]);
cout<<f[lim]<<endl;
return(0);
}