求大佬看看,wa了第二个点
  • 板块P1833 樱花
  • 楼主Kdlyh
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/2 22:36
  • 上次更新2023/11/3 11:24:12
查看原帖
求大佬看看,wa了第二个点
77076
Kdlyh楼主2023/11/2 22:36
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

string a, b;
int T, N;
int t[10010], c[10010], p[10010];
int dp[10010][1010];

void getTime() {
	int ha = 0, hb = 0, ma = 0, mb = 0;
	bool is_ha = true, is_hb = true;
	cin >> a >> b;
	for (int i = 0; i < a.length(); i++) {
		if (a[i] != ':' && is_ha) {
			ha = ha * 10 + a[i] - '0';
			continue;
		}
		is_ha = false;
		if (a[i] != ':' && !is_ha) {
			ma = ma * 10 + a[i] - '0';
		}
	}
	for (int i = 0; i < b.length(); i++) {
		if (b[i] != ':' && is_hb) {
			hb = hb * 10 + b[i] - '0';
			continue;
		}
		is_hb = false;
		if (b[i] != ':' && !is_hb) {
			mb = mb * 10 + b[i] - '0';
		}
	}
	if (mb < ma) {
		T = mb + 60 - ma + ((hb - ha - 1) * 60);
	} else {
		T = mb - ma + (hb - ha) * 60;
	}
}

int main() {
	getTime();
	cin >> N;
	for (int i = 1; i <= N; i++) {
		cin >> t[i] >> c[i] >> p[i];
	}
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= T; j++) {
			if (p[i] != 0) {
				for (int k = 1; k * t[i] <= T && k <= p[i]; k++) {
					dp[i][j] = dp[i - 1][j];
					if (k * t[i] <= j)
						dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - k * t[i]] + k * c[i]);

				}
			} else {
				for (int k = 0; k * t[i] <= j; k++) {
					dp[i][j] = max(dp[i][j], dp[i - 1][j - k * t[i]] + k * c[i]);
				}
			}

		}
	}

	cout << dp[N][T];
	return 0;
}

2023/11/2 22:36
加载中...