求助全re
查看原帖
求助全re
1022616
Jaspercheng楼主2024/4/20 17:00
#include <bits/stdc++.h>
#define f1(x , y) for(register int i = x ; i <= y ; i++)
#define f2(x , y) for(register int j = x ; j <= y ; j++)
#define ri register int
#define ll long long
#define il inline
#define cs const
using namespace std;

il int rd(){
    int out = 0 , flag = 1; char c = getchar();
    while(c < '0' || c >'9'){if(c == '-')flag = -1; c = getchar();}
    while(c >= '0' && c <= '9'){out = out * 10 + c - '0'; c = getchar();}
    return flag * out;
}

cs int N = 6e1 + 10 , M = 3.2e4 + 10;
int n , m , f[M] , x , y;
struct node{int h , u , p , q;}w[N];
vector <int> p[N];

int main(){
	n = rd() , m = rd();
	f1(1 , m) w[i].h = i , w[i].u = rd() , w[i].p = rd() , w[i].q = rd();
	f1(1 , m){if(w[i].q){p[w[i].q].push_back(i); if(p[w[i].q].size() == 3) p[w[i].q].push_back(-1);} else p[i].push_back(i);}
	for(int k = 1 ; k <= m ; k++){
		if(p[k].empty()) continue;
		for(int i = n ; i >= 0 ; i--)
			f2(0 , p[i].size() - 1){
				if(j == 0) x = w[i].u * w[i].p , y = w[i].u;
				if(j == 1 || j == 2) x = w[p[i][j]].u * w[p[i][j]].p + w[i].u * w[i].p , y = w[p[i][j]].u + w[i].u;
				if(j == 3) x = w[p[i][1]].u * w[p[i][1]].p + w[p[i][2]].u * w[p[i][2]].p + w[i].u * w[i].p , y = w[p[i][1]].u + w[p[i][2]].u + w[i].u;
				if(i < y) continue;
				f[i] = max(f[i] , f[i - y] + x);
			}
	}cout << f[n];
	return 0;
}
2024/4/20 17:00
加载中...