比赛 2026.9.5 评测结果 AAEEEAEEEEEAEEEEEEAAAAAAE
题目名称 Asteroid Mining 最终得分 40
用户昵称 2_16鸡扒拌面 运行时间 3.860 s
代码语言 C++ 内存使用 6.82 MiB
提交时间 2026-09-05 11:07:09
显示代码纯文本
#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#define ll long long
#define f first
#define s second
#define SNSNMO 500010
using namespace std;

struct edge{
    ll v,w;
}a[SNSNMO];
ll n,m;
ll dp[SNSNMO]={0};
bool cmp(edge a1,edge b)
{
    return a1.v>b.v;
}

int main()
{
    freopen("Mining.in","r",stdin);
    freopen("Mining.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    cin>>n>>m;
    bool flag=1;
    for(int i=1;i<=n;++i)
    {
        cin>>a[i].v>>a[i].w;
        if(i>1&&a[i].w!=a[i-1].w) flag=0;
    }
    if(flag)
    {
        sort(a+1,a+n+1,cmp);
        ll cnt=m/a[1].w,ans=0;
        for(int i=1;i<=cnt;++i)
        {
            ans+=a[i].v;
        }
        cout<<ans;
        return 0;
    }
    for(int i=1;i<=n;++i)
    {
        for(int j=m;j>=1;--j)
        {
            if(j>=a[i].w) dp[j]=max(dp[j],dp[j-a[i].w]+a[i].v);
        }
    }
    cout<<dp[m];
    return 0;
}