[JZOJ P1271] [DP]集合求和

Posted kaike

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JZOJ P1271] [DP]集合求和相关的知识,希望对你有一定的参考价值。

@kaike

传送门

就这么简单的题目,我交了四回?

让你用 1-n 个数看是否能组成等式

可以看出 1-n 明显是一个等差数列 恩

数列题刷的都要吐了不过不难

由求和公式Sn=n*(n+1)/2

组成等式 左边=右边=Sn/2

先判断是否有解

 

1     s=n*(n+1);
2     if(s%4!=0)
3     {
4         cout<<0<<endl;
5         return 0;
6     }

 

设边界f[0]=1

如背包问题

我知道这是一个很恶劣的词语,但是具体我还没有悟出来

f[j]=f[j]+f[j-i];

这一次的分法就等于这一次j比i多出来的数的分法加上原来i的分法

注意long long !!!

 

 1 #include<iostream>
 2 using namespace std;
 3 long long n,f[10000100],s;
 4 int main()
 5 {
 6     cin>>n;
 7     s=n*(n+1);
 8     if(s%4!=0)
 9     {
10         cout<<0<<endl;
11         return 0;
12     }
13     s/=4;
14     f[0]=1;
15     for(int i=1;i<=n;i++)
16         for(int j=s;j>=i;j--)
17             f[j]+=f[j-i];
18     cout<<f[s]/2<<endl;
19     return 0;
20 }
你撒

 

以上是关于[JZOJ P1271] [DP]集合求和的主要内容,如果未能解决你的问题,请参考以下文章

Jzoj 3056NOIP2012模拟10.27容斥DP数学数字

JZOJ 1667 ( bzoj 1801 ) [ AHOI 2009 ] 中国象棋 —— DP

JZOJ5153:树形图求和

[JZOJ3233] 照片

力扣152,53题,最大子序列求和and积

[JZOJ3486]道路改建