背包全家桶求调
查看原帖
背包全家桶求调
1048109
RedStoneShark楼主2023/8/4 16:51

#include<iostream>
using namespace std;
int ss,st,rs,rt,n,m;
int a[100010],b[100010],c[100010],v[100010],w[100010],dp[100010],sum=0;
void work()
{
	for(int i=1;i<=n;i++)
	{
		int aa=1;
		while(c[i]!=0)
		{
			v[++sum]=a[i]*aa;
			w[sum]=b[i]*aa;
			c[i]-=aa;
			aa*=2;
			if(c[i]<aa)
			{
				v[++sum]=a[i]*c[i];
				w[sum]=b[i]*c[i];
				break;
			}
		}
	}
}
int main(){
	scanf("%d:%d%d:%d&d",&ss,&st,&rs,&rt,&n);
	int x1=ss*60+st,x2=rs*60+rt;
	int t=x2-x1;
	cout<<t<<endl;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i]>>c[i];
		if(!c[i]) c[i]=999999;
	}
	work();
	for(int i=1;i<=sum;i++){
		for(int j=m;j>=w[i];j--){
			dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
		}
	}
	cout<<dp[m];
	
}

樱花那题,搞了一下午搞不出来

2023/8/4 16:51
加载中...