题解:CF1989D Smithing Skill
CF1989D Smithing Skill
题意
给定
同时给定
求你能用这
思路
首先考虑贪心,锻造一把武器之后立刻熔毁,肯定是最优的。对于第
若通过花费最少的武器k进行若干轮操作后材料数
但直接贪心复杂度会爆。因为不同原料之间相互独立,所以我们分开来考虑。对于所有
那么我们再预处理出在
对于每一个材料
最后别忘了将
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int a[N],b,f[N];
int c[N];
int s,n,m,y,ans;
signed main(){
memset(f,0x3f,sizeof f);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
ans=0;
for(int i=1;i<=n;i++){
cin>>a[i];
s=max(s,a[i]);
}
for(int i=1;i<=n;i++){
cin>>b;
f[a[i]]=min(f[a[i]],a[i]-b);
}
for(int i=1;i<=s;i++){
f[i]=min(f[i],f[i-1]);
}
for(int i=1;i<=s;i++){
if(i>=f[i])
c[i]=c[i-f[i]]+1;
}
while(m--){
cin>>y;
if(y>s){
int t=(y-s)/f[s]+1;
y-=t*f[s];
ans+=t;
}
ans+=c[y];
}
cout<<ans*2<<'\n';
}