1004训练
正在进行…
IOI
开始于: 2026-10-4 9:00
2400
小时
主持人:
7
动态规划:
1.定义一个状态.... 清楚的知道dp[i]含义
dp[i]:
大概定义的方向:
1.表示(选)到i项的最大价值,最小值,方案数....
2.表示选 前i项的最大价值,最小值,方案数....
2.找转移的方向 (前驱或者后继)
进而找直接前驱(后继),就是能够一步,一次操作转移过来
3.写状态转移方程
用直接前驱(后继)来做转移
分析思路:
dp[i]: 数字增加到i时的方案数
前驱: i-a i-b
dp[c]=1,
从c+1开始推:
dp[i]=dp[max(i-a,c)]+dp[max(i-b,c)];
答案:dp[n]
子段分析思路:
dp[i];表示选到第i项的最大子段和
dp[i]=a[i];//独立为一段
直接前驱:dp[i-1]
为什么:因为子段要求连续,又因为当前选了第个i元素,那么前面只能接在i-1为结尾的子段后面
dp[i]=dp[i-1]+a[i];
总结:dp[i]=max(a[i],dp[i-1]+a[i]);
答案:最后找所有dp[i]的最大值
LIS:
dp[i]:表示选到第i项时的最长LIS长度
子序列不要求连续,那么第i元素可以接在1,2,3....i-1都可以
所以前驱1----i-1
直接前驱: j:1--i-1里面每个位置 a[j] 的值如果小于a[i] 那么可以转移
我们会在赛后检查代码相似度。
- 状态
- 正在进行…
- 规则
- IOI
- 题目
- 21
- 开始于
- 2026-10-4 9:00
- 结束于
- 2027-1-12 9:00
- 持续时间
- 2400 小时
- 主持人
- 参赛人数
- 7