80分求助,玄一关!
  • 板块P1833 樱花
  • 楼主doooge
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/4 16:35
  • 上次更新2024/10/4 18:58:58
查看原帖
80分求助,玄一关!
1286553
doooge楼主2024/10/4 16:35

代码:

#include <bits/stdc++.h>
using namespace std;
long long dp[1000010],ww[50010],vv[50010];
int main()
{
//	freopen("P1833_9.in" , "r" , stdin);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	string s,s2;
	int n,m,num = 0,num2 = 0,num3 = 0,num4 = 0;
	cin >> s >> s2 >> n;
	int pos = s.find(":");
	for (int i = 0 ; i < pos ; i++) num = num * 10 + s[i] - '0';
	for (int i = pos + 1 ; i < s.size() ; i++) num2 = num2 * 10 + s[i] - '0';
	int pos2 = s2.find(":");
	for (int i = 0 ; i < pos2 ; i++) num3 = num3 * 10 + s2[i] - '0';
	for (int i = pos2 + 1 ; i < s2.size() ; i++) num4 = num4 * 10 + s2[i] - '0';
	if (num3 * 60 + num4 < num * 60 + num2) m += 1440;
	m = num3 * 60 + num4 - num * 60 - num2;
//	cout << m << endl;
	int cnt = 0;
	for (int i = 1 ; i <= n ; i++)
	{
		int w,v,s;
		cin >> w >> v >> s;
		if (s == 0) s = m;
		for (int j = 1 ; j <= s ; j *= 2)
		{
			cnt++;
			ww[cnt] = w * j;
			vv[cnt] = v * j;
			s -= j;
		}
		if (s > 0)
		{
			cnt++;
			ww[cnt] = w * s;
			vv[cnt] = v * s;
		}
	}
	for (int i = 1 ; i <= cnt ; i++)
	{
		for (int j = m ; j >= ww[i] ; j--)
		{
			dp[j] = max(dp[j] , dp[j - ww[i]] + vv[i]);
		}
	}
	cout << dp[m] << endl;
	return 0;
}
2024/10/4 16:35
加载中...