求和比较(第十二届 省赛 T4)

 

题目

 

那么先把A1,A2所组成的等式列出来:

 

解出A1:

 

 

 

 

 

 

 之后,我们可以发现问题变成了求1~n之间任意和为A1的可能性——01背包。顺便看一眼,要用long long!

完整代码:

#include<bits/stdc++.h>
using namespace std;
int n,m;
long long f[100][501];//f[i][j]:在前n个数,合为j的情况下的可能性。 
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>m;
    f[0][0]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=i;j++)
        {
            f[i][j]=f[i-1][j];
        }
        for(int j=i;j<501;j++)
        {
            f[i][j]=f[i-1][j]+f[i-1][j-i];
        }
    }
    int t=((n+1)*n/2+m)/2;//解出来的A1用到了 
    cout<<f[n][t];//注意输出 
    return 0;
}

 

posted @ 2023-03-25 21:56  王浩泽  阅读(52)  评论(0编辑  收藏  举报