为什么不初始化就会错?
查看原帖
为什么不初始化就会错?
273435
l_yu楼主2023/1/13 15:21

第51行f[0][0]=0不加就过不了,调试的时候有的数据会影响f[0][0]的值,可是前面又没用到f数组,f[0][0]的值为什么会变?

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define LL long long

const int maxn=2e3+10;
struct prf {
	int x,sum=0;
};
prf pd[3];
int q;
int pr[maxn][3];
LL f[maxn][maxn];
void prime(int k) {
	for(int i=2; i<=k; i++) {
		if(k%i==0) {
			pd[++q].x=i;
			while(k%i==0) {
				pd[q].sum++;
				k/=i;
			}
		}
	}
	return ;
}
bool F(int i,int j) {
	int d=min(i,j);
	for(int t=1; t<=q; t++) {
		if(pr[i][t]-pr[d][t]-pr[i-d][t]<pd[t].sum) {
			return 0;
		}
	}
	return 1;
}
int main() {
	int t,k;
	cin>>t>>k;
	prime(k);
	for(int i=1; i<=maxn; i++) {
		for(int j=1; j<=q; j++) {
			if(i%pd[j].x==0) {
				pr[i][j]=pr[i/pd[j].x][j]+1;
			}
		}
	}
	for(int i=1; i<=maxn; i++) {
		for(int j=1; j<=q; j++) {
			pr[i][j]+=pr[i-1][j];
		}
	}
	f[0][0]=0;
	for(int i=1; i<maxn; i++) {
		for(int j=1; j<maxn; j++) {
			f[i][j]=F(i,j)+f[i-1][j]+f[i][j-1]-f[i-1][j-1];
		}
	}
	while(t--){
		int n,m;
		cin>>n>>m;
		cout<<f[n][m]<<endl;
	}
	return 0;
}
2023/1/13 15:21
加载中...