记录编号 348878 评测结果 AAAAAAAAAA
题目名称 [NOIP 2006]金明的预算方案 最终得分 100
用户昵称 Gravatar龙征天 是否通过 通过
代码语言 C++ 运行时间 0.011 s
提交时间 2016-11-14 17:11:39 内存使用 2.52 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <climits>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;

struct node
{
	int w[100],v[100];
};
const int maxn=32000+10;
node q[100];
int f[100][maxn];
int n,m,max1;
int getint();
int tian()
{
	freopen("budget.in","r",stdin);
	freopen("budget.out","w",stdout);
	
	m=getint(); n=getint();
	for(int i=1; i<=n; i++) 
	{
		int x,y,z;
		x=getint(); y=getint(); z=getint();
		if(z==0)//主件 
		{
			q[i].v[1]=x;
			q[i].w[1]=x*y;
		}
		else//附件 
		{
			if(q[z].v[2]!=0)
			{
				q[z].v[3]=x;
				q[z].w[3]=x*y;
			}
			else
			{
				q[z].v[2]=x;
				q[z].w[2]=x*y;
			}
		}
	}
	
	for(int i=1; i<=n; i++)//转成每种情况 
	{
		q[i].v[4]=q[i].v[3]+q[i].v[2]+q[i].v[1];//主件1和附件23
		q[i].w[4]=q[i].w[3]+q[i].w[2]+q[i].w[1];
		
		q[i].v[2]=q[i].v[2]+q[i].v[1];//主件1和附件2 
		q[i].w[2]=q[i].w[2]+q[i].w[1];
		
		q[i].v[3]=q[i].v[3]+q[i].v[1];//主件1和附件3 
		q[i].w[3]=q[i].w[3]+q[i].w[1];
		
		q[i].v[5]=0;//不选 
		q[i].w[5]=0;
	}
	
	for(int i=1; i<=n; i++)
	for(int j=1; j<=m; j++)
	{
		f[i][j]=f[i-1][j];
 		for(int k=1; k<=5; k++)//分组背包 
		{
			if(j-q[i].v[k]>=0)
			{
				if(f[i-1][j-q[i].v[k]]+q[i].w[k]>f[i][j])
					f[i][j]=f[i-1][j-q[i].v[k]]+q[i].w[k];
			}
		}
	}
	
	printf("%d\n",f[n][m]);
	
	return 0;
}
int tian1=tian();
int main()
{
	;
}
int getint()
{
	int x=0,s=1;
	char ch=' ';
	while(ch<'0' || ch>'9')
	{
		ch=getchar();
		if(ch=='-') s=-1;
	}
	while(ch>='0' && ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	return x*s;
}