首页 > 其他分享 >ABC350

ABC350

时间:2024-04-22 17:11:24浏览次数:16  
标签:return Dice ll long ABC350 mp lld%

E.

杀了我个措手不及的记忆化搜索。

首先观察 \(N \leq 10^{18}.\) 但是这却是个不用矩快的 \(DP.\)

设 \(f[x]\) 为 \(x\) 的答案。

有以下两种决策:

第一种:\(f[x]=f[x/A]+X\),也就是直接执行第一种方案。

第二种:掷出 \(Dice\),然后考虑 \(Dice\) 的期望。

\(f[x]=\dfrac{f[x]+f[x/2]+f[x/3]+f[x/4]+f[x/5],f[x/6]}{6}+Y\)

解方程。解得:

\(f[x]=\dfrac{5}{6}(f[x/2]+f[x/3]+f[x/4]+f[x/5],f[x/6])+Y\)

然后考虑继续优化:注意到 \(x\) 常有重复,并且每一个 \(f[x]\) 在单独的题目情况下恒定。所以记忆化搜索。

注意开 \(\texttt{long long, long double.}\)

程式
#include <bits/stdc++.h>
#define db long double
#define ll long long
using namespace std;
map<ll,db> mp; 
ll N,A,X,Y;
db f(ll x){ if(mp[x]) return mp[x]; if(!x) return 0; return mp[x]=min(X+f(x/A),(f(x/2)+f(x/3)+f(x/4)+f(x/5)+f(x/6)+6*Y)/5.0); }
int main(){
	scanf("%lld%lld%lld%lld",&N,&A,&X,&Y);
	printf("%Lf\n",f(N));
	return 0;
}

标签:return,Dice,ll,long,ABC350,mp,lld%
From: https://www.cnblogs.com/chihirofujisaki/p/18151012/ABC350

相关文章

  • [ABC350] 赛后总结
    [ABC350]赛后总结AK之。A模拟//Problem:A-PastABCs//Contest:AtCoder-AtCoderBeginnerContest350//Author:Moyou//Copyright(c)2024MoyouAllrightsreserved.//Date:2024-04-2020:00:23#include<algorithm>#include<cstring>#incl......
  • ABC350题解(E-G)
    E直接搜一下\(N\)的可能到达的值的个数,发现不多(大约\(10^4\)个),直接暴力dp(记忆化搜索)。转移式\(f_i=\max(X\log_{A}N,\dfrac{\sum\limits_{j=1}^6f_{i/j}}{6}+Y)\)。化简得到\(f_i=\max(X\log_{A}N,\dfrac{\left(\sum\limits_{j=2}^6f_{i/j}\right)+6Y}{5})\)。F文艺......