| 比赛 |
2026.9.5 |
评测结果 |
AAEEEAEEEEEAWWWWWWAAAAAAE |
| 题目名称 |
Asteroid Mining |
最终得分 |
40 |
| 用户昵称 |
杨蕙宇 |
运行时间 |
2.580 s |
| 代码语言 |
C++ |
内存使用 |
8.76 MiB |
| 提交时间 |
2026-09-05 11:57:36 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
const int M=1e4+10;
const int lN=1e3+10;
typedef long long ll;
const ll INF=1e18;
bool f;//是否有不相同的m
int n,m;
struct node{
ll v,w;
}e[N];
bool cmp(node x,node y){
return x.v>y.v;
}
ll dp[M];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
freopen("Mining.in","r",stdin);
// freopen("d1p1.3-52.in","r",stdin);
freopen("Mining.out","w",stdout);
cin>>n>>m;
cin>>e[1].v>>e[1].w;
for(int i=2;i<=n;i++){
cin>>e[i].v>>e[i].w;
if(e[i].w!=e[1].w)f=1;
}
if(!f){
ll ans=0;
sort(e+1,e+1+n,cmp);
for(int i=1;i<=n;i++){
if(m>=e[i].w)ans+=e[i].v,m-=e[i].w;
else break;
}
cout<<ans;
}
else{
ll ans=0;
for(int i=0;i<=m;i++)dp[i]=0;
dp[0]=0;
for(int i=1;i<=n;i++){
for(int j=m;j>=0;j--){
if(j>=e[i].w)dp[j]=max(dp[j],dp[j-e[i].w]+e[i].v);
}
}
for(int i=m;i>=0;i--){
if(dp[i]==INF)continue;
else ans=max(ans,dp[i]);
}
cout<<ans;
}
return 0;
}