求和比较(第十二届 省赛 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; }