https://www.cnblogs.com/Atanisi/p/7596135.html
参考这个文章的解释,写出了如下代码。
经典的动态规划问题,在动态规划的过程中还完成了统计是比较厉害的。这个我有时候处理不好,包括昨天的递归后数据还原的经典思想。
C部分的代码如下:
int findNumberOfLIS(int* nums, int numsSize) {
int d[numsSize+1];
int count[numsSize+1];
for(int n=0;n<numsSize;n++)
{
d[n]=1;
count[n]=1;
}
int max=0;
for(int n=0;n<numsSize;n++)
{
for(int m=0;m<n;m++)
{
if(nums[n]>nums[m]&&d[m]+1>d[n])
{
d[n]=d[m]+1;
count[n]=count[m];
}
else if(nums[n]>nums[m]&&d[m]+1==d[n])
{
count[n]+=count[m];
}
}
max=max>d[n]?max:d[n];
}
int result=0;
for(int n=0;n<numsSize;n++)
{
printf("%d;",count[n]);
if(d[n]==max)
result+=count[n];
}
return result;
}
另外还学习到的一点就是,memset对于char类型比较好用,或者用于清零。
其他类型会出问题。
具体链接如下:
http://blog.youkuaiyun.com/sunbaofeng2/article/details/7851853