求助
查看原帖
求助
604231
dongshucheng楼主2024/7/29 12:04

rt,不知道为什么 60pts

#include<bits/stdc++.h>
#define int long long
#define maxn 100005
#define lc rt<<1
#define rc rt<<1|1
#define fq(i,a,b) for(int i=a;i<=b;i++)
#define fp(i,a,b) for(int i=a;i<b;i++)
#define frq(i,a,b) for(int i=a;i>=b;i--)
#define frp(i,a,b) for(int i=a;i>b;i--)
using namespace std;
int h,x,y,z;
priority_queue<pair<int,int>> C;
int dp[maxn];
int vis[maxn];
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);
    cin>>h>>x>>y>>z;
    memset(dp,0x7f,sizeof(dp));dp[0]=1; C.push(make_pair(dp[0],0));
    while(!C.empty()) {
        auto now=C.top(); C.pop();
        if(vis[now.second]) continue; vis[now.second]=1;
        int to=(now.second+y)%x;
        if(dp[to]>dp[now.second]+y) dp[to]=dp[now.second]+y,C.push(make_pair(dp[to],to));
		to=(now.second+z)%x;
        if(dp[to]>dp[now.second]+z) dp[to]=dp[now.second]+z,C.push(make_pair(dp[to],to));
    }
    int ans=0;
    fp(i,0,x) {
        if(dp[i]>h) continue;
        else ans+=(h-dp[i])/x+1;
    }
    cout<<ans;
    return 0;
}
2024/7/29 12:04
加载中...