WA0求调
查看原帖
WA0求调
817524
CR400BFAZ5254楼主2025/1/23 15:48
#include<bits/stdc++.h>
#define MAXN 214
#define MAXM 20010
using namespace std;
int b[MAXN],c[MAXN],jl[MAXN];
int w[MAXN<<5],v[MAXN<<5];
int f[MAXM];
int ans[MAXN];
bool vis[MAXN];
int cnt=0;
int n,k;
void dfs(int x){
	if(x==0){
		for(int i=1;i<=n;i++) cout << ans[i] << " ";
		exit(0);
	}
	for(int i=1;i<=cnt;i++){
		if(vis[i] || w[i]>x) continue;
		if(f[x]==f[x-w[i]]+v[i]){
			vis[i]=1;
			ans[jl[i]]+=c[i];
			dfs(x-w[i]);
			ans[jl[i]]-=c[i];
			vis[i]=0;
		}
	}
}
int main(){
	cin >> n;
	for(int i=1;i<=n;i++) vis[i]=0;
	for(int i=1;i<=n;i++) cin >> b[i];
	for(int i=1;i<=n;i++) cin >> c[i];
	cin >> k;
	f[0]=0;
	for(int i=1;i<=k;i++) f[i]=100000000;
	for(int i=1;i<=n;i++){
		for(int j=0;(1<<j)<=c[i];j++){
			cnt++;
			w[cnt]=(1<<j)*b[i];
			v[cnt]=(1<<j);
			jl[cnt]=i;
			c[i]-=(1<<j);
		}
		if(c[i]){
			cnt++;
			w[cnt]=c[i]*b[i];
			v[cnt]=c[i];
			jl[cnt]=i;
		}
	}
	for(int i=1;i<=cnt;i++){
		for(int j=k;j>=w[i];j--){
			if(f[j]>f[j-w[i]]+v[i]){
				f[j]=f[j-w[i]]+v[i];
			}
		}
	}
	cout << f[k] << endl;
	dfs(k);
	return 0;

}






2025/1/23 15:48
加载中...