社区讨论

站外题求助,玄5关

学术版参与者 3已保存回复 9

讨论操作

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

当前回复
9 条
当前快照
1 份
快照标识符
@lznsr687
此快照首次捕获于
2024/08/10 15:10
2 年前
此快照最后确认于
2024/08/10 15:59
2 年前
查看原帖
这道题可以打dfs吗,为什么我的dfs代码会错,是我漏想什么吗?
求助大佬,在线等,急。
CPP
#include<iostream>
#include<string>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<iomanip>
#include<cstdio>
#include<queue>
#include<stack>
#include<deque>
using namespace std;
#define int long long
const int N = 1e6+10;
const int mod = 998244353;
const int INF = 0x3f3f3f3f;
int n;
int a[N];
//bool vis[N];
int dfs(int k,int num,int sum){
	if(k+a[k]>n||k+num>n)return sum;
	int cnt=sum%mod;
	for(int i=k+1;i<=n;i++){
		if(a[i]<0)continue;
		cnt+=dfs(i,((num-1>=0)?num-1:a[i]),((num-1<=0)?sum+1:0))%mod;
		cnt%=mod;
	}
	return cnt;
}
signed main(){
	//freopen("","r",stdin);
	//freopen("","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	int h=dfs(0,0,0);
	cout<<h<<endl;
	return 0;
}


回复

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

正在加载回复...