比赛 |
20121108 |
评测结果 |
AAWWWWWWWAAWWWWWWWWW |
题目名称 |
还是“金明的预算方案” |
最终得分 |
20 |
用户昵称 |
htwc |
运行时间 |
0.126 s |
代码语言 |
C++ |
内存使用 |
3.16 MiB |
提交时间 |
2012-11-08 10:12:16 |
显示代码纯文本
#include <iostream>
#include <fstream>
using namespace std;
struct Thing
{
int v,p,vc[11],pc[11];
Thing()
{
for(int i=0;i<=10;i++)
vc[i]=pc[i]=0;
v=p=0;
}
}thing[61];
int n,m,f[3201],cnt[61],c=0,s;
int main()
{
freopen("budgetb.in","r",stdin);
freopen("budgetb.out","w",stdout);
cin>>n>>m>>s;
n/=10;
int v,p,q;
for(int i=1;i<=m;i++)
{
cin>>v>>p>>q;
v/=10;
if(!q)
{
thing[++c].v=v;
thing[c].p=p;
}
else
{
thing[q].vc[cnt[q]]=v;
thing[q].pc[cnt[q]++]=p;
}
}
// for(int i=1;i<=c;i++)
// {
// cout<<thing[i].v<<" "<<thing[i].p<<" "<<thing[i].pc[0]<<" "<<thing[i].vc[0]<<" "<<thing[i].pc[1]<<" "<<thing[i].vc[1]<<endl;
// }
for(int i=1;i<=c;i++)
{
for(int v=n;v>=thing[i].v;v--)
{
int temp=0,Max=0,t2,t3,t4;
if(v-thing[i].v>=0)
{
Max=f[v-thing[i].v]+thing[i].v*thing[i].p;
for(int k=1;k<(1<<cnt[i]);k++)
{
t2=t3=0;
for(int temp=k,cc=cnt[i];temp;temp=temp>>1,cc--)
{
t2+=thing[i].vc[cc]*(temp&1);
t3+=thing[i].pc[cc]*(temp&1);
}
if(t2>v)continue;
if((t4=f[v-t2]+t2*t3)>Max)Max=t4;
}
}
f[v]=max(f[v],Max);
}
}
cout<<f[n]*10<<endl;
return 0;
}