请求揭秘,为什么前缀和数组反而存储了答案
查看原帖
请求揭秘,为什么前缀和数组反而存储了答案
114859
shight楼主2021/8/13 09:09
#include<bits/stdc++.h>
using namespace std;
int n,k,f[1001][1001],f2[1001][1001],sum[1001][1001];//f[i][j]表示长度为i的数列中有j组逆序对的数列个数 
int main()
{
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++)f[i][0]=sum[i][0]=f2[i][0]=1;
	for(int i=2;i<=n;i++)
		for(int j=1;j<=k;j++)
		{
			if(j-i>=0)f[i][j]=(sum[i-1][j]-sum[i-1][j-i]+10000)%10000;
				else f[i][j]=sum[i-1][j]%10000;
			sum[i][j]=(sum[i][j-1]+f[i][j])%10000;
			/*for(int m=max(0,j-i+1);m<=j;m++)
				f2[i][j]=(f2[i][j]+f2[i-1][m])%10000;*/
		}
	/*for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=k;j++)
			printf("%d ",f[i][j]);
		cout<<endl;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=k;j++)
			printf("%d ",sum[i][j]);
		cout<<endl;
	}
	cout<<endl;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=k;j++)
			printf("%d ",f2[i][j]);
		cout<<endl;
	}*/
	printf("%d\n",sum[n][k]);
}

本来以为f是答案 sum是处理前缀和的 结果sum变成了答案 十分好奇这是为什么

2021/8/13 09:09
加载中...