这是一个用于查找具有给定总和的子集的程序。我正在使用动态编程。 虽然根据我的逻辑似乎是正确的。我没有得到正确的答案。我的代码如下。 Thanks`
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t,n,sum,**m,*a,i,j,k,temp;
scanf("%d",&t);
for(k=0;k<t;k++)
{
scanf("%d%d",&n,&sum);
a = (int *)malloc(n * sizeof(int));
for(j=0;j<n;j++)
{
scanf("%d",&a[i]);
}
m = (int **)malloc((n+1) * sizeof(int *));
for(i=0;i<n+1;i++)
{
m[i] = (int *)malloc((sum+1) * sizeof(int));
m[i][0] = 1;
}
for(j=1;j<sum+1;j++)
{
m[0][j] = 0;
}
for(i=0;i<n+1;i++)
{
for(j=0;j<sum+1;j++)
{
printf("%d ",m[i][j]);
}
printf("\n");
}
printf("\n\n\n");
for(i=1;i<n+1;i++)
{
for(j=1;j<sum+1;j++)
{
temp = j- a[i-1];
if(m[i-1][j] == 1)
m[i][j] =1;
else
if(temp >= 0)
m[i][j] = m[i-1][temp];
else
m[i][j] = 0;
}
}
for(i=0;i<n+1;i++)
{
for(j=0;j<sum+1;j++)
{
printf("%d ",m[i][j]);
}
printf("\n");
}
if(m[n][sum] == 1)
{
printf("YES\n%d",m[n][sum]);
}
else
printf("NO\n%d",m[n][sum]);
}
return 0;
}`
我是编程新手。任何帮助表示赞赏。