1 条题解

  • 0
    @ 2026-5-2 20:43:30
    #include<iostream>
    using namespace std;
    int n,r,u;
    int ans[1000001];
    int ask(int eq,int ueq){
    	if(!ueq)return min(ans[eq],ans[eq+1])+u;
    	return max(min(ans[eq],ans[eq+1])+u,min(ans[ueq],ans[ueq+1])+r);
    }
    int main(){
    	cin>>n>>r>>u;
    	for(int i=2,j=1;i<=n;i++){
    		ans[i]=ask(j,i-j*2);
    		while((j+1)*2<=i&&ask(j+1,i-j*2-2)<ans[i]){
    				++j;
    			ans[i]=ask(j,i-j*2);
    		}
    	}
    	cout<<ans[n];
    //	puts("");
    //	for(int i=1;i<=n;i++){
    //		cout<<dfs(i)<<'\n';
    //	}
    	return 0;
    }
    
    • 1

    信息

    ID
    10353
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者