D. Smithing Skill

原题链接

题解

当我剩下 k 个金属时,我肯定选 aik 并且 aibi 最小的那个

此题还用了分治法,由于金属数量最高可达 1e9 所以当金属数量大于 1e6 的时候肯定用 cost[1e6]

code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[1000006],b[1000006],dp[1000006]={0},cost[1000006]={0};//cost代表剩下cost个金属时,烧融一次最少要消耗几个金属
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    memset(cost,0x3f,sizeof cost);
    ll n,m;
    cin>>n>>m;

    for(ll i=1;i<=n;i++) cin>>a[i];
    for(ll i=1;i<=n;i++) cin>>b[i];

    for(ll i=1;i<=n;i++)
    {
        cost[a[i]]=min(cost[a[i]],a[i]-b[i]);
    }

    for(ll i=1;i<=1e6;i++)
    {
        cost[i]=min(cost[i],cost[i-1]);
    }

    for(ll i=1;i<=1e6;i++)
    {
        if(cost[i]<=i) dp[i]=dp[i-cost[i]]+1;
        else dp[i]=dp[i-1];
    }

    ll ans=0;
    while(m--)
    {
        ll x;
        cin>>x;
        if(x>=1000000)
        {
            ll tem=x-1000000,jian=tem/cost[1000000]+1LL;
            ans+=jian;
            x-=cost[1000000]*jian;
        }
        ans+=dp[x];
    }
    cout<<ans*2LL;
    return 0;
}


posted @   纯粹的  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示