样例对了10分代码求助
  • 板块P1833 樱花
  • 楼主cuteAru
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/7/4 11:16
  • 上次更新2023/11/3 11:40:46
查看原帖
样例对了10分代码求助
675915
cuteAru楼主2023/7/4 11:16

有二进制优化

#include<bits/stdc++.h>
using namespace std;
int c,k;
int d[100010];
int w[100010];
int p[100010];
int s[100010];
int b,b1,e,e1,n;
int main()
{
    scanf("%d:%d",&b,&b1);
    scanf("%d:%d",&e,&e1);
    n=(e*60+e1)-(b*60+b1);
	cin>>c;
	for(int i=1;i<=c;i++)
	{
		int wi,pi,si;
		cin>>wi>>pi>>si;
		if(si>0)
		{
			int t=1;
			while(t<=si)
			{
				k++;
				w[k]=t*wi;
				p[k]=t*pi;
				si=si-t;
				t=t*2;
				s[k]=1;
			}
			if(si>0)
			{
				k++;
				w[k]=si*wi;
				p[k]=si*pi;
				s[k]=1;
			}
		}
		else
		{
			k++;
			w[k]=wi;
			p[k]=pi;
			s[k]=si;
		}
	}
	for(int i=1;i<=k;i++)
	{
		if(s[k]==1)
		{
			for(int j=n;j>=w[i];j--)
			{
				d[j]=max(d[j],d[j-w[i]]+p[i]);
			}
		}
		else if(s[k]==0)
		{
			for(int j=w[i];j<=n;j++)
			{
				d[j]=max(d[j],d[j-w[i]]+p[i]);
			}
		}
	}
	cout<<d[n];
}

qwq

2023/7/4 11:16
加载中...