求助abc415 G WA on最后一个点
查看原帖
求助abc415 G WA on最后一个点
590609
jiangjiangQwQ楼主2025/7/22 09:15
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
#define int long long
const int N=2e5+5,Max=601;
int n,m;
struct node{
    int a,b;
}cola[N];
int f[N];
unordered_map<int,int> mp;
signed main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>cola[i].a>>cola[i].b;
        mp[cola[i].a]=max(mp[cola[i].a],cola[i].b);
    }
    int id=1;
    for(int i=1;i<=m;i++){
        //算性价比
        if(cola[i].b*cola[id].a>cola[id].b*cola[i].a) id=i;
    }
    /*
    对于大于Max的部分直接贪心做
    小于Max的部分dp
    两者结合就是最优解
    */
    int ans=0;
    if(n>Max){
        int w=cola[id].a-cola[id].b;
        int cnt=(n-cola[id].a)/w+1;
        ans+=cnt*cola[id].a;
        n-=cnt*w;
    }
    for(int i=1;i<=Max+5;i++){
        f[i]=i;
        for(auto c:mp){
            int w=c.first-c.second;
            if(i>=max(w,c.first)) f[i]=max(f[i],f[i-w]+c.first);
        }
    }
    cout<<f[n]+ans;
    return 0;
}
2025/7/22 09:15
加载中...