扩展的母函数(可以做减法的母函数)(当然只要你愿意也可以做乘除!)
生活随笔
收集整理的這篇文章主要介紹了
扩展的母函数(可以做减法的母函数)(当然只要你愿意也可以做乘除!)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
nows nowe 分別代表 正數(shù)范圍上的 nowe代表負(fù)數(shù)范圍上的。
nexts nexte 同理。
也就是用新的nowe nexte 存儲(chǔ)負(fù)數(shù)的結(jié)果即可。擴(kuò)展到負(fù)數(shù)域。這樣就可以做減法的母函數(shù)的題目啦。
注意這個(gè)時(shí)候物品可以是負(fù)數(shù)的。負(fù)數(shù)的話就存在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++) //對(duì)于每一個(gè)值 {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想到了減法。那么乘法 很簡單。除法則是要擴(kuò)展到分?jǐn)?shù)。。我覺得應(yīng)該可以用map來實(shí)現(xiàn)吧。其實(shí)負(fù)數(shù)也可以直接用map來實(shí)現(xiàn)的。這個(gè)解法只是個(gè)人無聊之作啦。
轉(zhuǎn)載于:https://www.cnblogs.com/Milkor/p/4446133.html
總結(jié)
以上是生活随笔為你收集整理的扩展的母函数(可以做减法的母函数)(当然只要你愿意也可以做乘除!)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php实现单个用户禁止重复登录,防止同一
- 下一篇: Running Nutch in Ecl