题解:P14360 [CSP-J 2025] 多边形 / polygon(民间数据)
背景
考场应该切了,
题意
给你
分析
符合条件要满足
不妨两边都减去
变成
这个是不是更加熟悉了。
注意到,排序就可以解决最大值的问题。
那么问题就变成了,对于每一个
明显背包版题,只是注意到
但我们只要求大于
Code
#include<bits/stdc++.h>
using namespace std;
// #define int long long
#define File(x) (freopen(x".in","r",stdin),freopen(x".out","w",stdout))
#define Filein(x) freopen(x".in","r",stdin)
const int N=5e3+5,M=1e5+10,mod=998244353;
int n;
int a[N];
int dp[M];
void work(){
cin>>n;
int V=0,ans=0;
for(int i=1;i<=n;i++)
cin>>a[i],V+=a[i];
V=min(V,5001);
sort(a+1,a+n+1);
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=a[i]+1;j<=V;j++)
ans=(ans+dp[j])%mod;
for(int j=V;j>=0;j--)
dp[min(j+a[i],5001)]=(dp[min(j+a[i],5001)]+dp[j])%mod;
//通过min(j+a[i],5001)实现把大于压缩进一个
}
cout<<ans;
}
void clear(){}
signed main(){
int _=1;
while(_--)work(),clear();
return 0;
}
/*
*/
评价
T4 放板子题太水了,今年 CSP-S 我考炸了,也算是安慰吧!