本文整理汇总了C++中trie::init方法的典型用法代码示例。如果您正苦于以下问题:C++ trie::init方法的具体用法?C++ trie::init怎么用?C++ trie::init使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类trie
的用法示例。
在下文中一共展示了trie::init方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
while (true)
{
scanf("%d%d",&n,&m);
if (n == 0 && m == 0) break;
ac.init();
for (int i = 0; i < n; i++)
{
scanf("%s",buf);
ac.insert(buf,i);
}
for (int i = 0; i < m; i++)
{
scanf("%s",buf);
ac.insert(buf,-1);
}
ac.build();
tot = 0;
pos[tot++] = 0;
for (int i = 0; i < ac.L; i++)
if (ac.endv[i] == false && ac.endr[i] != 0)
pos[tot++] = i;
for (int i = 0; i < tot; i++)
Gao(i);
memset(dp,-1,sizeof(dp));
dp[0][0] = 0;
for (int i = 0; i < (1<<n); i++)
for (int j = 0; j < tot; j++)
if (dp[i][j] != -1)
for (int k = 0; k < tot; k++)
if (d[j][k] != -1)
{
int newsta = i|ac.endr[pos[k]];
if (dp[newsta][k] == -1 || dp[newsta][k] > dp[i][j]+d[j][k])
dp[newsta][k] = dp[i][j]+d[j][k];
}
int res = -1;
for (int i = 0; i < tot; i++)
if (dp[(1<<n)-1][i] != -1)
if (res == -1 || res > dp[(1<<n)-1][i])
res = dp[(1<<n)-1][i];
printf("%d\n",res);
}
return 0;
}