大佬求助,最后两个re了
  • 板块P1833 樱花
  • 楼主bobzbh
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/7/10 20:22
  • 上次更新2023/10/27 21:11:16
查看原帖
大佬求助,最后两个re了
111349
bobzbh楼主2022/7/10 20:22
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
struct node
{
	int bea,ti;
}sakura[45000];
int dp[5][900000];
int main()
{
	char a[10],b[10];
	int n;
	cin>>a>>b>>n;
	int time=0,la=strlen(a),lb=strlen(b),h=0,mi=0;
	bool flag=0;
	for(int i=0; i<lb; ++i)
	{
		if(b[i]==':')
		{
			flag=1;
		}
		else
		{
			if(flag==0)
			{
				h*=10;
				h+=b[i]-'0';
			}
			else
			{
				mi*=10;
				mi+=b[i]-'0';
			}
		}
	}
	time=h*60+mi;
	flag=0,h=0,mi=0;
	for(int i=0; i<la; ++i)
	{
		if(a[i]==':')
		{
			flag=1;
		}
		else
		{
			if(flag==0)
			{
				h*=10;
				h+=a[i]-'0';
			}
			else
			{
				mi*=10;
				mi+=a[i]-'0';
			}
		}
	}
	time=time-60*h-mi;
	int tot=1;
	for(int i=1; i<=n; i++)
	{
		int times,beauty,time_u;
		cin>>time_u>>beauty>>times;
		if(times==0)
		{
			times=time/time_u+1;
		}
		for(int j=1; j<=times; ++j)
		{
			sakura[tot].bea=beauty;
			sakura[tot].ti=time_u;
			tot++;
		}
	}
	tot--;
	memset(dp,0,sizeof(dp));
	for(int i=1; i<=tot; ++i)
	{
		for(int j=1; j<=time; ++j)
		{
			if(i%2==1)
			{
				if(j-sakura[i].ti<0)
				{
					dp[1][j]=dp[2][j];
				}
				else
				{
					dp[1][j]=max(dp[2][j],dp[2][j-sakura[i].ti]+sakura[i].bea);
				}
			}
			else
			{
				if(j-sakura[i].ti<0)
				{
					dp[2][j]=dp[1][j];
				}
				else
				{
					dp[2][j]=max(dp[1][j],dp[1][j-sakura[i].ti]+sakura[i].bea);
				}
			}
			
		}
	}
	if(tot%2==0)
	{
		cout<<dp[2][time];
	}
	else
	{
		cout<<dp[1][time];
	}
	return 0;
}
2022/7/10 20:22
加载中...