P3147 [USACO16OPEN]262144 P
第十题 P3147 [USACO16OPEN]262144 P
题目分析
此题为区间 ,却与一般的 题不同。能够看出是两个相邻区间合并,但是却不知道具体是哪两个区间。
因此,我们需要将区间加入状态描述中。左端点,区间长度,右端点三选二。这里选择左端点和区间长度。
设 表示以 为左端点合成数字 的区间长度。当区间长度为 时,表示不存在这样的区间。
则可得到状态转移方程:
code
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int n,dp[60][270000],ans; int main(){ scanf("%d",&n); int x; for(int i=1;i<=n;i++) scanf("%d",&x),dp[x][i]=1; for(int i=2;i<=58;i++){ for(int j=1;j<=n;j++){ if(!dp[i][j]) if(dp[i-1][j]&&dp[i-1][j+dp[i-1][j]])//判断两个区间是否存在 dp[i][j]=dp[i-1][j]+dp[i-1][j+dp[i-1][j]]; if(dp[i][j]) ans=max(ans,i); } } cout<<ans<<endl; return 0; }
的最大值为 是因为 且范围为 。
所以 的最大值为 。
summary
算是拓宽了在区间 解法中的另一种常规思路吧。和 算法有着异曲同工之妙,也算变相复习了 算法了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!