社区讨论

dp入门题求调,悬4关

AT_s8pc_4_e Enormous Atcoder Railroad参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@m25xkge4
此快照首次捕获于
2024/10/12 17:04
去年
此快照最后确认于
2025/11/04 17:23
4 个月前
查看原帖
以下两程序的差别是有无init()中的初始化,第一个wa,第2个是对的。
求问这个初始化的错误在哪。
CPP
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int M=2505,N=10005;
int n,k,X,ans=1,a[M];
int pre[M][N][2];
int dp[M][N][2];
void init(){
  //dp[i][j][0]:区间长度j,可以再走i次
  //初始化
	for(int i=1;i<=X;i++){
		dp[i][1][0]=dp[i][1][1]=1;
		pre[i][1][0]=pre[i][1][1]=1;
	}
	dp[0][1][0]=1;
	for(int i=1;i<N;i++)pre[0][i][0]=1;
	for(int j=2;j<N;j++){
		for(int i=1;i<=X;i++){
			int len=min(i+i,j-1);
			if(2*i>=j-1)dp[i][j][0]++;
			if(2*i>=j)dp[i][j][1]++;
			dp[i][j][0]=((long long)dp[i][j][0]+pre[i][j-1][1]-pre[i][j-2*i-1][1]+mod)%mod;
			dp[i][j][1]=((long long)dp[i][j][1]+pre[i-1][j-1][0]-pre[i-1][j-2*i-1][0]+mod)%mod;				
			pre[i][j][0]=((long long)pre[i][j-1][0]+dp[i][j][0])%mod;
			pre[i][j][1]=((long long)pre[i][j-1][1]+dp[i][j][1])%mod;
		}
	}
}
signed main(){
	cin>>n>>k>>X;
	init();
	for(int i=1;i<=k;i++)scanf("%d",&a[i]);
	for(int i=1;i<=k;i++){
		if(i>1){
			ans=((long long)ans*dp[X-i+2][a[i]-a[i-1]][1])%mod;
		}
	}
	cout<<ans;
	return 0;                           
}  
CPP
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int M=2505,N=10005;
int n,k,X,ans=1,a[M];
int pre[M][N][2];
int dp[M][N][2];
void init(){
	for(int j=1;j<N;j++){
		for(int i=0;i<=X;i++){
			int len=min(i+i,j-1);
			if(2*i>=j-1)dp[i][j][0]++;
			if(2*i>=j)dp[i][j][1]++;
			dp[i][j][0]=((long long)dp[i][j][0]+pre[i][j-1][1]-pre[i][j-2*i-1][1]+mod)%mod;
			dp[i][j][1]=((long long)dp[i][j][1]+pre[i-1][j-1][0]-pre[i-1][j-2*i-1][0]+mod)%mod;				
			pre[i][j][0]=((long long)pre[i][j-1][0]+dp[i][j][0])%mod;
			pre[i][j][1]=((long long)pre[i][j-1][1]+dp[i][j][1])%mod;
		}
	}
}
signed main(){
	cin>>n>>k>>X;
	init();
	for(int i=1;i<=k;i++)scanf("%d",&a[i]);
	for(int i=1;i<=k;i++){
		if(i>1){
			ans=((long long)ans*dp[X-i+2][a[i]-a[i-1]][1])%mod;
		}
	}
	cout<<ans;
	return 0;                           
}  

回复

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

正在加载回复...