建设网站细节wordpress 英文链接
web/
2025/10/9 8:48:18/
文章来源:
建设网站细节,wordpress 英文链接,安利的网站谁做的,百度导航是哪个国家的本专题主要介绍在求序列的经典问题上dp的应用。 我们上次用前缀和来解决#xff0c;这次让我们用dp解决把
我们参考不下降子序列的思路#xff0c;可以令f[i]为以i结尾的最大字段和#xff0c;易得#xff1a;
f[i]max(a[i],a[i]f[i-1]);
下面是AC代码#xff1a;
#in…本专题主要介绍在求序列的经典问题上dp的应用。 我们上次用前缀和来解决这次让我们用dp解决把
我们参考不下降子序列的思路可以令f[i]为以i结尾的最大字段和易得
f[i]max(a[i],a[i]f[i-1]);
下面是AC代码
#includebits/stdc.h
using namespace std;
int a[200010],dp[200010],n,ans-9999999;
int main(){cinn;for(int i1;in;i) scanf(%d,a[i]);dp[1]a[1];for(int i2;in;i){dp[i]max(a[i],a[i]dp[i-1]);ansmax(ans,dp[i]);}ansmax(ans,dp[1]);coutans;
}
接题 因为是求两个序列我们把dp弄成二维。
我们令f[i][j]为第一个序列前i个与第二个序列前j个的最长公共子序列。
我们可以得出当两个序列后面加了一个数那么如果用到了其中一个那么那个子序列一定就结束了因为如果后面还有的话其中一个序列一定不符合因为它后面已经没数了
根据这个我们知道如果加的数不同相当于只有其中一个发挥作用我们取两个max即可
于是当s1[i]s2[j]时f[i][j]1f[i-1][j-1];
当s1[i]!s2[j]时 f[i][j]max(f[i-1][j],f[i][j-1])
对于初始条件
s1[1]s2[1] f[1][1]1;
s1[1]!s2[1] f[1][1]0;
下面是AC代码
#include iostream
#include cstdio
#include cstring
#include algorithm
#include string
using namespace std;
string s1,s2;
int dp[1000][1000];
int main(){while(cins1s2){memset(dp,0,sizeof(dp));for(int i1;is1.length();i){for(int j1;js2.length();j){if(s1[i-1]s2[j-1]) dp[i][j]1dp[i-1][j-1];else{dp[i][j]max(dp[i-1][j],dp[i][j-1]);}}}printf(%d\n,dp[s1.length()][s2.length()]);}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89542.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!