noip题
有必要每个题都记一遍吗???
P8865 [NOIP2022] 种花
我太菜了只能写出 80 分唉,看看怎么玩的吧。
我们肯定想到前缀和优化暴力查找本行的方案数,我们又可以想到下方的方案数也可以直接前缀和存下,然后就可以做到 80 分做法。
for(re int i=1;i<=n;i++){ for(re int j=1;j<=m;j++){ if(mp[i][j]!=1&&low[i][j]>2&&a[i][j]>1){ for(re int k=i+2;k<=n;k++){ if(mp[k][j]==1){ break; } cntc+=(a[i][j]-1)*(a[k][j]-1); cntc%=mod; if(low[k][j]>1){ cntf+=(a[i][j]-1)*(a[k][j]-1)*(low[k][j]-1); cntf%=mod; } } } } }
但是这样的话又前缀和从下到上又从上到下枚举,这样是 O(n^2) 的,还要枚举列,我们想可以直接动态地维护来去掉这个前缀和来少枚举一维。
for(int j=1;j<m;j++){ int jil=0,jif=0; for(int i=1;i<=n;i++){ if(a[i][j]==-1){ jif=jil=0; continue; } cntc+=(jil*a[i][j])%mod; cntc%=mod; cntf+=jif; cntf%=mod; jif+=(a[i][j]*jil)%mod; jil+=max(1ll*0,a[i-1][j]); } }
这段代码没法写什么,你只要在纸上画一画即可得到,但是我没想到这步。
总结:尽量优化算法!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」