为什么需要优化啊???
  • 板块P1833 樱花
  • 楼主Size_OIer
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/8/10 10:19
  • 上次更新2023/11/3 04:48:08
查看原帖
为什么需要优化啊???
756716
Size_OIer楼主2023/8/10 10:19

我直接普通混合背包就过了。。。

#include<bits/stdc++.h>
using namespace std;
const int maxn=10000+5;
string a,b;
int n;
int w[maxn],v[maxn],p[maxn];
int f[maxn];
int main(){
	cin>>a>>b;
	int x=0,xx=0;
	for(int i=0;i<=a.length();i++){
		if(i==0) while(a[i]!=':'){
			x=x*10+(a[i]-'0');
			i++;
		}else {
			while(i<a.length()){
				xx=xx*10+(a[i]-'0');
				i++;
			}
		}
	}
	int y=0,yy=0;
	for(int i=0;i<=b.length();i++){
		if(i==0) while(b[i]!=':'){
			y=y*10+(b[i]-'0');
			i++;
		}else {
			while(i<b.length()){
				yy=yy*10+(b[i]-'0');
				i++;
			}
		}
	}
	int time=y*60+yy-x*60-xx;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i]>>p[i];
	}
	for(int i=1;i<=n;i++){
		if(p[i]==0){
			for(int j=w[i];j<=time;j++){
				f[j]=max(f[j],f[j-w[i]]+v[i]);
			}
		}else if(p[i]==1){
			for(int j=time;j>=w[i];j--){
				f[j]=max(f[j],f[j-w[i]]+v[i]);
			}
		}else{
			for(int j=time;j>=w[i];j--){
				for(int k=1;k<=p[i]&&j-w[i]*k>=0;k++){
					f[j]=max(f[j],f[j-k*w[i]]+k*v[i]);
				}
			}
		}
	}
	cout<<f[time]<<endl;
	return 0;
}
2023/8/10 10:19
加载中...