求和为k的最长子序列 c语言

给定一个序列,求和为k的最长子序列和最长子序列长度,c语言帮忙提供一个算法

输入一个序列,如: 1,5,6,4,2,3
输入一个整数,如:7
输出:
1 4 2
3

上述例子和为7的子序列有1,4,2 和 3,4 和 2,5 和 1,6
最长子序列为1,4,2,长度为3
如果没有和等于7的序列,则返回null


#include <stdio.h>
#include <math.h>

int main()
{
    int input[100]{0};
    char in;
    int n=0;
    int tar=0;
    int k = 0;
    while ((in=getchar())!='\n')
    {
        if (in!=',')
        {
            input[n] *=10;
            input[n] += (in-48);
        }
        else
        {
            n++;
        }
    }
    while ((in = getchar()) != '\n')
    {
            tar*= 10;
            tar+= (in - 48);
    }
    int len=0;
    int v=NULL;
    int st = 0;
    for (int i = 0; i < (1<<n); i++)
    {
        int tmp = 0;
        int tmp_count = 0;
        for (int j = 0; j < n; j++)
        {
            if ((st>>j)&0x01)
            {
                tmp += input[j];
                tmp_count++;
            }
        }
        if (tmp==tar)
        {
            if (tmp_count>len)
            {
                len = tmp_count;
                v = st;
            }
        }
        st++;
    }
    if (v!=NULL)
    {
        for (int i = 0; i < n; i++)
        {
            if ((v >> i) & 0x01)
            {
                printf("%d ", input[i]);
            }
        }
        printf("\n%d", len);
    }
    else
    {
        printf("null");
    }
}