记录编号 163242 评测结果 AAAAAAAAAA
题目名称 [NOIP 2006]金明的预算方案 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 0.015 s
提交时间 2015-05-23 18:47:24 内存使用 2.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int qian,n,a[102][102];
int b[102][102],za[45000];
int qiann[3000],num,zhong[3000];
int f[450000],nnum;
bool s[96];
int main()
{   freopen("budget.in","r",stdin);
	freopen("budget.out","w",stdout);
  cin>>qian>>n;
  for(int i=1;i<=n;++i)
  {     int p;
		cin>>qiann[i]>>zhong[i]>>p;
		za[i]=qiann[i]*zhong[i];
		if(p!=0)
		{
			a[p][++a[p][0]]=i;
		}
		else
		 {
				a[i][++a[i][0]]=i;
		 }
  }
  /*for(int i=1;i<=3;++i)
   cout<<za[a[1][i]]<<" "<<qiann[a[1][i]]<<endl;*/
   int m=n;
  for(int i=1;i<=n;++i)
   {
	  if(a[i][0]==1)
	      {     nnum++;
				b[nnum][0]++;
				b[nnum][b[nnum][0]]=a[i][1];
	      }
      if(a[i][0]==2)
      {
	     nnum++;
	     b[nnum][0]+=2;
	     b[nnum][1]=a[i][1];
		 za[b[nnum][1]]=za[a[i][1]];
		 qiann[b[nnum][1]]=qiann[a[i][1]];
		 m++;
		 b[nnum][2]=m;
	     za[b[nnum][2]]=za[a[i][1]]+za[a[i][2]];
	     qiann[b[nnum][2]]=qiann[a[i][1]]+qiann[a[i][2]];
       }
      if(a[i][0]==3)
      {   //cout<<i<<endl<<endl;
		nnum++;
		b[nnum][0]+=4;
		b[nnum][1]=a[i][1];
		za[b[nnum][1]]=za[a[i][1]];
		qiann[b[nnum][1]]=qiann[a[i][1]];
		m++;
		b[nnum][2]=m;
        za[b[nnum][2]]=za[a[i][1]]+za[a[i][2]];
	    qiann[b[nnum][2]]=qiann[a[i][1]]+qiann[a[i][2]];
	    m++;
	    b[nnum][3]=m;
	    za[b[nnum][3]]=za[a[i][1]]+za[a[i][3]];
	    qiann[b[nnum][3]]=qiann[a[i][1]]+qiann[a[i][3]];
	    m++;
	    b[nnum][4]=m;
	    za[b[nnum][4]]=za[a[i][1]]+za[a[i][2]]+za[a[i][3]];
	    qiann[b[nnum][4]]=qiann[a[i][1]]+qiann[a[i][2]]+qiann[a[i][3]];
       }

   }
   /*for(int i=1;i<=nnum;++i)
	{
		for(int j=1;j<=b[i][0];++j)
		  cout<<qiann[b[i][j]]<<" "<<za[b[i][j]]<<endl;
		cout<<"LLLL"<<endl;
	}*/
  for(int i=1;i<=nnum;++i)
	 for(int j=qian;j>=0;--j)
      for(int k=1;k<=b[i][0];++k)
       if(j>=qiann[b[i][k]])
       {
            int haha=b[i][k];
            if(f[j]<f[j-qiann[haha]]+za[haha])
			   f[j]=f[j-qiann[haha]]+za[haha];
       }
	cout<<f[qian];
	//system("pause");
}