nows nowe 分别代表 正数范围上的 nowe代表负数范围上的。
nexts nexte 同理。
也就是用新的nowe nexte 存储负数的结果即可。扩展到负数域。这样就可以做减法的母函数的题目啦。
注意这个时候物品可以是负数的。负数的话就存在nowe nexte上即可。
#include#include #include int main(){ int n; int nows[1000]; int nowe[1000]; int nexts[1000]; int nexte[1000]; int val[10]; int i,j,k; int sum; while(scanf("%d",&n)!=EOF) { memset(nows,0,sizeof(nows)); memset(nowe,0,sizeof(nowe)); memset(nexts,0,sizeof(nexts)); memset(nexte,0,sizeof(nexte)); sum = 0; for(i=0;i =0){ nexts[j+k*val[i]] += nowe[-j];} else{nexte[-(j+k*val[i])] += nowe[-j]; } } else { if(j+k*val[i]>=0){nexts[j+k*val[i]] += nows[j];} else{nexte[-(j+k*val[i])] += nows[j]; } } } } memcpy(nows,nexts,sizeof(nexts)); memcpy(nowe,nexte,sizeof(nexte)); memset(nexts,0,sizeof(nexts)); memset(nexte,0,sizeof(nexte)); } for(i=0;i<=sum;i++) { printf("%d:%d ",i,nows[i]); } } }
想到了减法。那么乘法 很简单。除法则是要扩展到分数。。我觉得应该可以用map来实现吧。其实负数也可以直接用map来实现的。这个解法只是个人无聊之作啦。