洛谷 P1092 蟲食算

2022-08-13 11:48:08 字數 2128 閱讀 3512

啟發:

80分**

#include#include#includeusing namespace std;

const int maxn=32;

int n,exp[4][maxn],val[maxn],flag,used[maxn];

void func(int &x,int &y,int &z,int bft,int idx);

void dfs(int x/*ö´ððµúxî»*/,int y/*óð½øî»*/);

void func(int &x,int &y,int &z,int bft,int idx)

if(x!=-1&&y!=-1&&z!=-1)

return;

}if(x==-1)

inline bool check()

if((ii+jj)%n!=kk&&(ii+jj+1)%n!=kk)

}return false;

}inline bool okay()

ii=(jj+kk+ii)/n;

}if(ii)

for(int i=0;i=n)

for(int i=0;i增加了模組化,按照搜尋基本架構寫,雖然損了一些效率,但**更加清晰可讀

80分**// luogu-judger-enable-o2

#include#include#include#includeusing namespace std;

const int maxn=32;

int n,exp[4][maxn],val[maxn],flag,used[maxn],pos[maxn],vis[maxn],top;

inline bool check()

}else if(-1!=ii&&-1!=jj&&-1==kk)

}else if(-1!=ii&&-1==jj&&-1!=kk)

}else if(-1==ii&&-1!=jj&&-1!=kk)}}

return false;

}inline bool okay()else if(i==1)

// printf(" ");

// if(i==3)

// for(int j=n;j>=1;j--)

// puts("");

// }

// puts("");

for(int i=1;i<=n;i++)

ii=(jj+kk+ii)/n;

}if(ii)

for(int i=0;i=n)

for(int i=0;i對搜尋物件進行了排序,可以有效降低複雜度

100分**// luogu-judger-enable-o2

#include#include#include#includeusing namespace std;

const int maxn=32;

int n,exp[4][maxn],val[maxn],flag,used[maxn],pos[maxn],vis[maxn],top;

inline bool check()

}else if(-1!=ii&&-1!=jj&&-1==kk)

}else if(-1!=ii&&-1==jj&&-1!=kk)

}else if(-1==ii&&-1!=jj&&-1!=kk)}}

int ii=val[exp[1][n]],jj=val[exp[2][n]],kk=val[exp[3][n]];

if(-1!=ii&&-1!=jj)

}if(-1==ii&&-1!=jj&&-1!=kk)

// puts("");

// }

// puts("");

for(int i=1;i<=n;i++)

ii=(jj+kk+ii)/n;

}if(ii)

for(int i=0;i=n)

for(int i=n-1;i>=0;i--)

}}int main()

}for(int i=1;i<=n;i++)}}

dfs(0);

return 0;

}

將最先搜到的物件從大到小列舉,可以輔助剪枝,因為當最後的位數太小時不容易產生進製,不會衝突,從而剪枝力度就小了

洛谷P1092 蟲食算

所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。來看乙個簡單的例子 其中 號代表被蟲子啃掉的數字。根據算式,我們很容易判斷 第一行的兩個數字分別是5和3,第二行的數字是5。現在,我們對問題做兩個限制 首先,我們只考慮加法的蟲食算。這裡的加法是n進製加法,算...

洛谷P1092 蟲食算

所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。來看乙個簡單的例子 其中 號代表被蟲子啃掉的數字。根據算式,我們很容易判斷 第一行的兩個數字分別是5和3,第二行的數字是5。現在,我們對問題做兩個限制 首先,我們只考慮加法的蟲食算。這裡的加法是n進製加法,算...

洛谷 P1092 蟲食算

所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。來看乙個簡單的例子 其中 號代表被蟲子啃掉的數字。根據算式,我們很容易判斷 第一行的兩個數字分別是5和3,第二行的數字是5。現在,我們對問題做兩個限制 首先,我們只考慮加法的蟲食算。這裡的加法是n進製加法,算...