关于#C语言#的问题,如何解决?

某股民投资某证券,购入该证券时间作为起始点0,当天的盈亏也定为0。假定证券价格每个交易日的变化有三档:比前一个交易日上涨1个单位,与前一个交易日持平,比前一个交易日下跌1个单位。
该股民对其持有证券的收益期望值是k个单位。即:只要该证券的价格比其购入的价格高k个单位,他就会卖出该证券获利了结;反之,如果没有达到预期的利润,他就会继续持有该证券,持有的天数最多为N个交易日。在第N个交易日,股民已经失去了耐心,无论是否达到收益预期,证券都会被该股民卖出。
有没有人给个思路,用C语言

(一)蛮力法

#include<stdio.h>
#include<iostream>
using namespace std; 
int num[3]={1,0,-1};
int paths[1000][1000];
int len[1000]={0};
int index=0;
int target=0;
void dfs(int n,int step,int sum,int path[])
{    
    if(step>n)
    return;
    if(sum==target)
    {
        int i=0;
        for(;i<step;i++)
            {
                paths[index][len[index]++]=path[i];
            }
        index++;
        return;
    }
    int i=0;
    for(i;i<3;i++)
    {    
        path[step]=num[i];
        dfs(n,step+1,sum+num[i],path);
    }
    return;
}
int main()
{    
    int n,path[1000]={0};
    scanf("%d %d",&n,&target);
    dfs(n,0,0,path);
    int i=0,j=0;
    for(i=0;i<index;i++)
    {    
        for(j=0;j<len[i];j++)
        {
            printf("%d ",paths[i][j]);
        }
        printf("\n");
    }
    printf("count=%d",index);
    return 0;
}

(二)递归回溯法

#include<stdio.h>
#include<iostream>
#include<vector>
using namespace std;
int num[3]={1,0,-1};
int paths[1000][1000];
int len[1000]={0};
int index=0;
int target=0;
void backtracking(int n,int step,int sum,vector<int>path)
{    
    if(step>n)
    return;
    if(sum==target)
    {   int i=0;
        for(;i<step;i++)
            {
                paths[index][len[index]++]=path[i];
            }
        index++;
        return;
    }
    int i=0;
    for(i;i<3;i++)
    {    
        int tempsum=sum+num[i];
        if(tempsum+n-step-1>=target)
        {    
            path.push_back(num[i]);
            backtracking(n,step+1,tempsum,path);
            path.pop_back();
        }
    }
    return;
}
int main()
{    
    int n;
    vector<int>path;
    scanf("%d %d",&n,&target);
    backtracking(n,0,0,path);
    int i=0,j=0;
    for(i=0;i<index;i++)
    {    
        for(j=0;j<len[i];j++)
        {
            printf("%d ",paths[i][j]);
        }
        printf("\n");
    }
    printf("count=%d",index);
    return 0;
}

动态规划,好像是类似完全背包问题