5835: 数学题
时间限制: 1 Sec 内存限制: 128 MB提交: 101 解决: 31
[ 提交][ 状态][ 讨论版][命题人: admin]
题目描述
给出一个n个未知数的方程,x[1],x[2],x[3]......x[n]
求x[1]+x[2]+x[3]....+x[n]==S的正整数解的个数,并且要保证,
对于任意i (1<=i< n) x[i]与x[i+1]相差不大于P;
求x[1]+x[2]+x[3]....+x[n]==S的正整数解的个数,并且要保证,
对于任意i (1<=i< n) x[i]与x[i+1]相差不大于P;
输入
第一行三个整数n,S,P。
输出
一行一个整数表示方程解的个数。
样例输入
2 10 2
样例输出
3
提示
三种情况分别是:
5+5=10
4+6=10
6+4=10
对于 30% 数据 2<=n<=10 ,p=0,S<=30;
对于 100% 数据 2<=n<=10,p<=3 , S<=30;
保证数据有梯度。
来源
#include<stdio.h>
#include<math.h>
int a[11], n, s, p, ans;
void dfs(int cur, int sum)
{
if(cur==n)
{
if(sum==s)
ans++;
return ;
}
else
{
for(int i=1;i<s;i++)
if(sum+i<=s)
{
if(cur==0)
{
a[cur]=i;
dfs(cur+1, sum+i);
a[cur]=0;
}
else
{
a[cur]=i;
if(fabs(a[cur]-a[cur-1])<=p)
{
dfs(cur+1, sum+i);
a[cur]=0;
}
}
}
}
}
int main()
{
ans=0;
scanf("%d%d%d", &n, &s, &p);
dfs(0, 0);
printf("%d\n", ans);
return 0;
}
/**************************************************************
Problem: 5835
User: ldu_reserver201701
Language: C++
Result: 正确
Time:292 ms
Memory:1092 kb
****************************************************************/