Jisoo

这种背包是不是把一维扔进状态就都能做了啊

\(dp_{i,j}\)表示到了第i个任务的时候A机器工作了j时间,转移显然

有点卡时间,注意常数优化

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
int p;
int t[6005][4];
int dp[2][300005];
int sum;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%d%d%d",&t[i][0],&t[i][1],&t[i][2]);
		sum=sum+max(max(t[i][0],t[i][2]),t[i][1]);
	}
	memset(dp,0x3f,sizeof(dp));
	dp[0][0]=0;
	for(int i=1;i<=n;++i){
		p^=1;
		int pre=p^1;
		memset(dp[p],0x3f,sizeof(dp[p]));
		for(int j=0;j<=sum;++j){
			if(t[i][0]!=0)
			dp[p][j]=min(dp[pre][j]+t[i][0],dp[p][j]);
			if(j>=t[i][2]&&t[i][2]!=0){
				dp[p][j]=min(dp[p][j],dp[pre][j-t[i][2]]+t[i][2]);
			}
			if(j>=t[i][1]&&t[i][1]!=0){
				dp[p][j]=min(dp[p][j],dp[pre][j-t[i][1]]);
			}
		}
	}
	int ans=999999999;
	for(int i=0;i<=sum;++i){
		ans=min(ans,max(dp[n&1][i],i));
	}
	cout<<ans;
	return 0;
}

相关文章:

  • 2021-07-02
  • 2022-03-03
  • 2021-10-13
  • 2021-11-10
  • 2021-06-13
  • 2022-03-07
  • 2021-12-30
  • 2021-09-26
猜你喜欢
  • 2021-07-29
  • 2022-12-23
  • 2022-01-24
  • 2021-09-11
  • 2021-07-22
  • 2022-03-05
  • 2021-07-19
相关资源
相似解决方案