rt,我的搜索90pts(O2),TLE on #10
虽然就一句剪枝
int n,m;
struct node
{
int v,w,q;
}a[70];
int lst[65];
int ans;
bool buy[65];
inline void dfs(int now,int hv,int ls)
{
if(hv+lst[now]<=ans)return;
if(now==m+1){ans=max(ans,hv);return;}
if(ls>=a[now].v&&(a[now].q==0||buy[a[now].q]))buy[now]=1,dfs(now+1,hv+a[now].w,ls-a[now].v),buy[now]=0;
dfs(now+1,hv,ls);
}
int main()
{
n=read(),m=read();n/=10;
for(register int i=1;i<=m;++i)
a[i].v=read(),a[i].w=read(),a[i].q=read(),a[i].v/=10,a[i].w=a[i].w*a[i].v;
for(register int i=m;i>=1;--i)lst[i]=lst[i+1]+a[i].w;
dfs(1,0,n);
printf("%d",ans*10);
return 0;
}