C++ | 动态规划 dp

一.递推

即所谓的找规律
如斐波那契,\(F(n)=F(n-1)+F(n-2)\)
信封:错排公式,有\(n\)个信封,有多少种信都装错信封的情况?
\(F(n)=(n−1)(F(n−1)+F(n−2))\)

技巧:代码优化

typedef long long ll;
ll a;//表示long long 

二.DP

最大字段和:

max=-100000;
for(int i=2;i<=n;i++)
{
    if(dp[i-1]+a[i]<0)dp[i]=0;
    else dp[i]=dp[i-1]+a[i];
    if(dp[i]>maxn)maxn=dp[i];
}

最长上升子序列

int ans=0;
for(int i=1;i<=n;i++)
{
    dp[i]=1;
    for(int j=1;j<i;j++)
        if(a[j]>a[i]) dp[i]=max(dp[i],dp[j+1]);
    ans=max(ans,dp[i]);
}
cout<<ans;

cout<<maxn<<endl;
```

猜你喜欢

转载自www.cnblogs.com/SuperTer/p/CPP-2.html
今日推荐