![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
区间dp
andyc_03
这个作者很懒,什么都没留下…
展开
-
【区间dp】P4302 [SCOI2003]字符串折叠
dp[i][j]记录i-j的最短长度因此初始状态为dp[i][i]=1;状态转移方程为dp[i][j]由k从中间分开的两部分组成,首先我们需要判断一下i-k是否能够折叠,如果能够折叠就可以更新了代码#include<bits/stdc++.h>using namespace std;char s[105];int n,dp[105][105];bool check(char c[],int len,int l){ for(int t=l;t<len..原创 2020-09-28 22:46:31 · 74 阅读 · 0 评论 -
【区间dp】P3205 [HNOI2010]合唱队
dp[i][j][0/1]表示i-j是由上一次放左(0)/上一次放右(1)转移的来的因此得到初始状态dp[i][i][0]=1; 注意这里不能把0和1都赋成1,否则会算多的然后就是状态转移的步骤了 dp[i][j][0]可能是由两种推出来的:dp[i+1][j][0]和dp[i+1][j][1]同理dp[i][j][1]是由:dp[i][j-1][0]和dp[i][j-1][1]最终结果为dp[1][n][0]和dp[1][n][1]的和代码#include<bits/.原创 2020-09-28 22:43:37 · 131 阅读 · 0 评论 -
【区间dp】P2858 [USACO06FEB]Treats for the Cows G/S
dp[i][j]表示i-j的最大利润,所以dp的初始状态就是dp[i][i]=a[i]*n然后对于每一个dp[i][j]都可能是上一步卖了左侧/右侧的进行的,这样就完成了状态转移代码#include<bits/stdc++.h>using namespace std;int n,dp[2005][2005],a[2005];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a.原创 2020-09-28 22:31:57 · 152 阅读 · 0 评论