当前位置:
首页 >
扩展的母函数(可以做减法的母函数)(当然只要你愿意也可以做乘除!)
发布时间:2024/4/13
70
豆豆
生活随笔
收集整理的这篇文章主要介绍了
扩展的母函数(可以做减法的母函数)(当然只要你愿意也可以做乘除!)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
nows nowe 分别代表 正数范围上的 nowe代表负数范围上的。
nexts nexte 同理。
也就是用新的nowe nexte 存储负数的结果即可。扩展到负数域。这样就可以做减法的母函数的题目啦。
注意这个时候物品可以是负数的。负数的话就存在nowe nexte上即可。
#include<stdio.h> #include<string.h> #include<math.h> 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<n;i++){scanf("%d",&val[i]);sum+=val[i];}//init .nows[0] = 1;nows[val[0]] =1;nowe[val[0]] =1; for(i=1;i<n;i++){for(j=-sum;j<=sum;j++) //对于每一个值 {for(k=-1;k<=1;k++){if(j<0){if(j+k*val[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]);}}} View Code想到了减法。那么乘法 很简单。除法则是要扩展到分数。。我觉得应该可以用map来实现吧。其实负数也可以直接用map来实现的。这个解法只是个人无聊之作啦。
转载于:https://www.cnblogs.com/Milkor/p/4446133.html
总结
以上是生活随笔为你收集整理的扩展的母函数(可以做减法的母函数)(当然只要你愿意也可以做乘除!)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: php实现单个用户禁止重复登录,防止同一
- 下一篇: Running Nutch in Ecl