10分求调
查看原帖
10分求调
1592168
qscpknfhty楼主2025/1/24 19:08
#include <bits/stdc++.h>
using namespace std;
int n,m,v[65],pp[65],q[65];
struct node{
	int val,val1,val11,val2,v,v1,v11,v2,p,p1,p2,q,pos,num;
}a[65];
int f[65][32005];
int main()
{
	cin >> n >> m;
	int p = 1;
	for (int i = 1;i <= m;i++)
	{
		cin >> v[i] >> pp[i] >> q[i];
		if (q[i] == 0)
		{
			a[p].val = pp[i] * v[i];
			a[p].v = v[i];
			a[p].q = q[i];
			a[p].pos = i;
			a[p].num = 0;
			p++;
		}
	}
	p--;
	/*
	cout << endl;
	for (int i = 1;i <= p;i++)
	{
		cout << a[i].val  << " " << a[i].pos << endl;;
	}
	*/
	for (int i = 1;i <= p;i++)
	{
		for (int j = 1;j <= m;j++)
		{
			if (q[j] == a[i].pos)
			{
				if (a[i].num == 0)
				{
					a[i].val1 = a[i].val + pp[j] * v[j];
					a[i].v1 = a[i].v + v[j];
					a[i].num++;
				}
				else if (a[i].num == 1)
				{
					a[i].val2  = a[i].val1 + pp[j] * v[j];
					a[i].v2 = a[i].v1 + v[j];
					a[i].val11 = a[i].val + pp[j] * v[j];
					a[i].v11 = a[i].v + v[j];
					a[i].num++;
				}
			}
		}
	}
	for (int i = 1;i <= p;i++)
	{
		for (int j = 0;j <= n;j++)
		{
			if (j >= a[i].v2)
			{
				f[i][j] = max(f[i - 1][j],max(f[i - 1][j - a[i].v] + a[i].val,max(f[i - 1][j - a[i].v1] + a[i].val1,max(f[i - 1][j - a[i].v11] + a[i].val11,f[i - 1][j - a[i].v2] + a[i].val2))));
			}
			else if (j >= a[i].v1 && j <= a[i].v11)
			{
				f[i][j] = max(f[i - 1][j],f[i - 1][j - a[i].v1] + a[i].val1);
			}
			else if (j >= a[i].v11 && j <= a[i].v1)
			{
				f[i][j] = max(f[i - 1][j],f[i - 1][j - a[i].v11] + a[i].val11);
			}
			
			else if (j >= a[i].v1 && j >= a[i].v11)
			{
				f[i][j] = max(f[i - 1][j],max(f[i - 1][j - a[i].v1] + a[i].val1,f[i - 1][j - a[i].v11] + a[i].val11));
			}
			
			else
			{
				f[i][j] = f[i - 1][j];
			}
		}
	}
	cout << f[p][n];
	return 0;
} 

开始只考虑主件附件一起买还有50分,现在连50都没有力 顺便评价一下我的码风吧(;´д`)ゞ

2025/1/24 19:08
加载中...