codeforces 509F Progress Monitoring
题意:
used[1 ... n] = {0, ..., 0};
procedure dfs(v):
print v;
used[v] = 1;
for i = 1, 2, ..., n:
if (a[v][i] == 1 and used[i] == 0):
dfs(i);
dfs(1);
给出一个深搜序, 求符合这个深搜序的树有多少种。
限制:
1 <= n <= 500
思路:
分治
/*cf 509F Progress Monitoring
题意:
used[1 ... n] = {0, ..., 0};
procedure dfs(v):
print v;
used[v] = 1;
for i = 1, 2, ..., n:
if (a[v][i] == 1 and used[i] == 0):
dfs(i);
dfs(1);
给出一个深搜序, 求符合这个深搜序的树有多少种。
限制:
1 <= n <= 500
思路:
分治
*/
#include
#include
#include
using namespace std;
#define LL __int64
const int N=505;
const int MOD=1e9+7;
LL dp[N][N];
int a[N];
LL gao(int l,int r){
if(l==r){
//cout<
<<' '<
<<' '<
<
=0) return dp[l][r]; dp[l][r]=gao(l+1,r); for(int i=r-1;i>=l+1;--i){ if(a[l+1]
used[1 ... n] = {0, ..., 0};
procedure dfs(v):
print v;
used[v] = 1;
for i = 1, 2, ..., n:
if (a[v][i] == 1 and used[i] == 0):
dfs(i);
dfs(1);
/*cf 509F Progress Monitoring
题意:
used[1 ... n] = {0, ..., 0};
procedure dfs(v):
print v;
used[v] = 1;
for i = 1, 2, ..., n:
if (a[v][i] == 1 and used[i] == 0):
dfs(i);
dfs(1);
给出一个深搜序, 求符合这个深搜序的树有多少种。
限制:
1 <= n <= 500
思路:
分治
*/
#include
#include
#include
using namespace std;
#define LL __int64
const int N=505;
const int MOD=1e9+7;
LL dp[N][N];
int a[N];
LL gao(int l,int r){
if(l==r){
//cout<
<<' '<
<<' '<
<
=0) return dp[l][r]; dp[l][r]=gao(l+1,r); for(int i=r-1;i>=l+1;--i){ if(a[l+1]