但是这样状态还是太多了,4的10次方已经超过百万,注意到当i-1已经不能用时,i-2已经没有意义,所以可以把此时i-2的两种状态压缩成一种,这样就变成了3的10次方,不到六万,再乘以150,一红九千万的状态,加上滚动数组的运用,空间不会超,关键是时间复杂度,9000万的状态,加上状态转移用到dfs转移,这个复杂度不好估算。大概在100左右,似乎没有办法承受该复杂度,刚开始我也就纠结在这了
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn=200;
int n,m,k;
int a[maxn][maxn];
int dp[2][60000];
int d[101],f[101];
int t1,t2;
int work(int s)
{
}
int gethash()
{
}
int dfs(int t,int ans)
{
// for(int
i=1;i<=m;i++)
// printf("%d
",f[i]);
// printf("%d
%d\n",ans,t1);
}
int ini(int t)
{
}
int main()
{
}
本文介绍了一个涉及动态规划(DP)的算法问题,并通过状态压缩技巧将复杂度从4的10次方降低到了3的10次方,使得算法能够在实际中取得不错的效果。文章详细解释了状态压缩的方法及如何通过递归实现状态转移。
1651

被折叠的 条评论
为什么被折叠?



