啟發:
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進製加法,算...