poj 2248 Addition Chains

来源:互联网 发布:水果软件可以录歌吗 编辑:程序博客网 时间:2024/06/04 23:24
#include<iostream>using namespace std;int n, len, num[20], ans[20];void dfs(int dep){    int i;    if(dep > len) return;  //  剪枝1。    if(num[dep-1] == n){        if(dep < len){            len = dep;            for(i = 0; i < dep; i ++)                ans[i] = num[i];        }        return;    }    for(i = dep-1; i >= 0; i --){    //  从后往前搜,时间复杂度会降低很多,这里不证了。        num[dep] = num[i] + num[dep-1];        if(num[dep] > n) continue;   //  剪枝2。        dfs(dep + 1);    }}int main(){    int i;    while(cin >> n && n != 0){        len = 11;        num[0] = 1;        dfs(1);        for(i = 0; i < len; i ++)            cout << ans[i] << ' ';        cout << endl;    }    return 0;}

0 0
原创粉丝点击