題目:poj1451
題意:給你乙個詞語出現次數的表,然後給你乙個輸入的數字串,每一步輸出它最可能出現的單詞。沒有了就輸出乙個東西。
解答:建乙個字典樹,然後深度遍歷這課樹。每遍歷一步都要記錄下當前的字串。最後輸出。要記錄當前位置最大值。如果該步沒有更新過最大值說明這一步找不到字母了。
用乙個str陣列記錄當前的串。用k記錄搜到多長了。注意回溯!還有,不管更新不更新答案,只要有就要繼續往下搜。
#include#include#include#include#include#include#includeusing namespace std;
const int maxn = 1010;
const int maxn = 110;
const int sonnum = 26,base = 'a';
int dir[11] = ;
int max[maxn];
char ans[maxn][maxn],str[maxn],numarr[maxn];
int n,m,k,p,len;
struct trie
;trie *newtrie()
return temp;
}void insert(trie *pnt,char *s,int a)
else
tmp -> son[s[i]-base] -> num += a;
tmp = tmp -> son[s[i]-base];
}}void dfs(trie *pnt,int step)
if(k != len-1)
dfs(tmp->son[i],step+1);
k--;
}}int main()
scanf("%d",&m);
printf("scenario #%d:\n",i);
while(m--)
else
break;
}for(int j = w;j < len;j++)
printf("manually\n");
printf("\n");
}printf("\n");
}return 0;
}
迭代加深搜搜尋
對於可以用回溯法求解但解答樹的深度沒有明顯上限的題目,可以考慮使用迭代加深搜尋。經典問題 埃及分數問題 給出乙個分數,比如19 45,把它寫成若干個形如1 ri的分數的和的形式,比如19 45 1 5 1 6 1 18,要求分母不能重複使用並且使用的分數的個數最少。如果有多組個數相同的解,最後的分數...
動態建樹之 查字典
題目 poj2503 題意 給幾個單詞的意思,再給幾個單詞,查字典 解答 字典樹咯 注意節點定義,每個節點定義乙個字元陣列 注意 空行停止!include include include includeusing namespace std const int sonnum 26,base a st...
BST 二叉搜尋樹 (動態建樹與靜態建樹)
判斷兩棵樹是否是同一棵樹 先序遍歷和中序遍歷對應相同或者中序遍歷和後序遍歷對應相同 思路 兩個陣列分別存放建好的樹的先序遍歷以及正序遍歷結果,然後對比是否相等 題目意思 這題是 hdu 3791 題目描述 判斷兩序列是否為同一二叉搜尋樹序列 輸入 開始乙個數n,1 n 20 表示有n個需要判斷,n ...