申请添加Hack数据
查看原帖
申请添加Hack数据
1312537
wfirstzhang楼主2024/7/8 14:16

输入:

100 3
1000 5 3
10 5 3
50 2 0

输出:

150

如果没考虑到情况“只选附件 22”也能 AC,但是这组数据会输出 100100。

错误代码:

#include<bits/stdc++.h>

using namespace std;

#define endl '\n'

#define TRACE 1
#define tcout TRACE && cout

#define IN(o) insert(o)

#define fi first
#define se second

#define int long long

#define fst ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

const int INF = 0x3f3f3f3f3f3f3f3f;

const int P = 998244353;

const int N = 1e6 + 10;

int n, m;

int f[N], wa[N], va[N];

vector<pair<int, int>> b[N];

signed main()
{
	cin >> n >> m;
	for(int i=1; i<=m; i++)
	{
		int v, p, q;
		cin >> v >> p >> q;
		if(q == 0)
		{
			wa[i] = v;
			va[i] = p;
		}
		else
		{
			b[q].push_back({v, p});
		}
	}
	for(int i=1; i<=m; i++)
	{
		for(int j=n; j>=wa[i]; j--)
		{
			f[j] = max(f[j], f[j-wa[i]] + (wa[i] * va[i]));
			if(b[i].size() == 0) continue;
			if(j-wa[i]-b[i][0].fi >= 0) f[j] = max(f[j], f[j-wa[i]-b[i][0].fi] + (wa[i] * va[i]) + (b[i][0].fi * b[i][0].se));
			if(b[i].size() < 2) continue;
			if(j-wa[i]-b[i][0].fi-b[i][1].fi >= 0) f[j] = max(f[j], f[j-wa[i]-b[i][0].fi-b[i][1].fi] + (wa[i] * va[i]) + (b[i][0].fi * b[i][0].se) + (b[i][1].fi * b[i][1].se));
		}
	}
	int res = 0;
	for(int i=1; i<=n; i++) res = max(res, f[i]);
	cout << res;
	return 0;
}
2024/7/8 14:16
加载中...