社区讨论

状态转移问题

P1439两个排列的最长公共子序列参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m2xa20wp
此快照首次捕获于
2024/10/31 20:24
去年
此快照最后确认于
2024/10/31 23:25
去年
查看原帖
请问为什么状态转移不能写成
CPP
if(a[i]==b[j])
f[i][j]=max(f[i-1][j]+1,f[i][j-1]+1);
	//f[i][j]=max(f[i-1][j-1]+1,f[i][j]);
求解释+hack数据 谢谢!
全部代码:
CPP
#include <bits/stdc++.h>
using namespace std;
#define N 11455


int f[N][N];
int a[N];
int b[N];


int main() {
	int n;
	cin >> n;
	for(int i =1;i<=n;i++){
		cin>>a[i];
	}
	for(int i =1;i<=n;i++)cin>>b[i];
	int ans = 0;
	for(int i =1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i]==b[j]){
				f[i][j]=max(f[i-1][j]+1,f[i][j-1]+1);
			}else{
				f[i][j]=max(f[i-1][j],f[i][j-1]);
			}
				ans=max(ans,f[i][j]);
		}
	
	}
	cout<<ans;
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...