社区讨论

dp做法,求条

P14360[CSP-J 2025] 多边形参与者 3已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mhz4jbmz
此快照首次捕获于
2025/11/15 01:20
3 个月前
此快照最后确认于
2025/11/16 14:03
3 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
long long n,a[5001],f[5001],ans,g[5001];
const int mod=998244353 ;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)	cin>>a[i];
	sort(a+1,a+1+n);
	int maxl=a[n];
	//求1-maxl  f数组 f[j]加起来长度=j的方案数 
	f[0]=1;
	for(int i=1;i<=n;i++)
		for(int j=maxl;j>=a[i];j--)	f[j]=(f[j]+f[j-a[i]])%mod;
	//求g数组 g[i]=f[1]+f[2]+....f[i]
	g[0]=1;
	for(int i=1;i<=maxl;i++)	g[i]=(g[i-1]+f[i])%mod; 
	//枚举最长边 累加方案数
	//最长边为a[i]方案数求法:
	// 2^(i-1)-g[a[i]]
	long long x=2;
	for(int i=3;i<=n;i++){
		x=(x*2)%mod;
		ans=(ans+x-g[a[i]]+1)%mod;
	}
	cout<<ans;
	return 0;
}
28求条QAQ

回复

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

正在加载回复...