2018山东冬令营:数学题

问题 A: 数学题

时间限制: 1 Sec   内存限制: 128 MB
提交: 62   解决: 22
[ 提交][ 状态][ 讨论版]

题目描述

给出一个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;

输入

第一行三个整数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;
保证数据有梯度。


【思路】

DFS 搜索,就可以,  pre 记录前驱,  注意剪枝


【代码实现】

#include 
#include 
 
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
 
 
typedef long long ll;
const int MAXN=1e6+5;
const ll INF=0x3f3f3f3f;
int n,s,p;
 
int a[5000];
int sc;
void dfs(int cot,int sum,int pre)
{
    if(sum>s) return ;
    if(cot==n-1)
    {
        if(sum==s)
        {
            //cout<>n>>s>>p;
    for(int i=1;i<=30;i++)
        dfs(0,i,i);
    cout<

123


你可能感兴趣的:(#,搜索相关算法,ACM进阶之路,DFS,2018山东冬令营)