前两个点没过,后面都过了
查看原帖
前两个点没过,后面都过了
555617
Targanzqq楼主2024/7/12 09:21

rt,求调

#include<bits/stdc++.h>
#define int long long
#define tp q.front() 
#define popf q.pop_front()
#define popb q.pop_back()
#define bk q.back()
#define push(k) q.push_back(k);
#define emp q.empty() 
using namespace std;

int n,W;
int f[101][40001]; 
deque<int> q;

signed main(){
	ios::sync_with_stdio(false);
	cin>>n>>W;
	for(int i=1;i<=n;i++){
		int w,v,m;
		cin>>w>>v>>m;
		for(int j=0;j<v;j++){
			for(int k=j;k<=W;k+=v){
				if(!emp&&tp<k-m*v)popf;
				if(!emp)f[i][k]=max(f[i-1][k],f[i-1][tp]+(k-tp)/v*w);
				while(!emp&&f[i-1][k]>=f[i-1][bk]+(k-bk)/v*w)popb;
				push(k);
			}
			while(!emp)popf;
		}
	}
	cout<<f[n][W];
}

2024/7/12 09:21
加载中...