首先可以不管套件,假定 ,那么答案不超过 ,也就是先倍增把 造出来,然后一步步造 .
答案这么小,那么常见的套路就是把答案放进复杂度里。
然后考虑一个 dp,假设当且在第 轮,令 为手中最牛逼的盔甲是 ,能够拿到最牛逼的武器是 ,想要 dp 出第 轮的 .
不用套件的转移,购买盔甲是 ,购买武器是 .
用套件的话,那么一定是用 和 ,要不然不会更优,所以也能类似转移。
通过打 tag 然后从后往前取 max 可以做到单次 转移,那么时间复杂度就是 .
const int N=200010;
int n,m,q,x,y,ans,f[N],g[N],fl;
map<int,int>vis[N];
void solve(){
read(n,m,q);
if(n>m)swap(n,m),fl=1;
while(q--)read(x,y),fl?swap(x,y),0:0,vis[x][y]=1;
f[1]=1;
for(;f[n]<m;++ans){
for(int i=1;i<=n;i++)if(f[i]){
int k=vis[i][f[i]];
cmax(g[min(n,i+f[i]+k)],f[i]);
cmax(g[i],min(m,i+f[i]+k));
}
for(int i=n;i>=1;i--)f[i]=max(g[i],f[i+1]),g[i]=0;
}
cout << ans << '\n';
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?