#5ra不知道为啥。。。
查看原帖
#5ra不知道为啥。。。
864319
Vegetablevird76楼主2023/11/30 21:48
#include <iostream>
using namespace std;
const int N = 110;
int m, n;
int f[N][N];
string na[N];
int nu[N], w[N], sp[N];

int main() {
	cin >> m >> n;
	int r = 21 - m;//剩余格子数
	for (int i = 1; i <= n; i++) {
		cin >> nu[i] >> w[i] >> sp[i] >> na[i];
		for (int j = 1; j <= i - 1; j++) {
			if (na[i] == na[j]) {
				nu[j] += nu[i];
				n --;
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = r; j >= 1; j --) {
			for (int k = 0; k <= nu[i]; k ++) {
				int s = sp[i];
				while (1) {
					if (s >= nu[i]) {
						s /= sp[i];
						break;
					} else
						s += sp[i];
				}
				if (j - s >= 0)
					f[i][j] = max(f[i - 1][j], f[i - 1][j - s] + w[i] * k);

			}
		}
	}
	cout << f[n][r];
	return 0;
}
2023/11/30 21:48
加载中...