明天省賽,所以今天做幾道所謂水題,可惜這個題因為輸出寫錯WA了很久,,,
如果直接枚舉矩陣所有的位置是否改變,那麼時間復雜度是承受不住的
這道題讓我學到的,就是:
1、遇到題先手算模擬,然後嘗試找規律吧。這道題的規律就是:第一行一旦確定,那麼整個矩陣就可以確定,所以枚舉第一行,還可以的
2、if else 一定把所有的情況邏輯都理清,這題Debug的時候稍微變了下寫法,又WA了很久,代碼也貼在後面了。Debug的時候,重用代碼的時候好好理理思路,很可能是老思路跟新思路的差異產生新的bug
#include#include #include using namespace std; const int MAXN = 20; //const int INF = 0x3fffffff;999 const int INF = 1000000000; int n,a[MAXN][MAXN],b[MAXN][MAXN]; int Judge(int m) { //memset(b,0,sizeof(b)); int tmp=0; for(int i=0;i =0)sum+=b[i-1][j-1]; if(j+1 =0)sum+=b[i-2][j]; if(sum%2) { if(!b[i][j]) { b[i][j]=1; tmp++; } else return INF; } } // 這種寫法是有問題的,因為 /*以上的步驟都沒有檢測最後一行,一下測試最後一行*/ for(int i=0;i =0)sum+=b[n-2][i]; if(i>0)sum+=b[n-1][i-1]; if(i+1 #include#include #include using namespace std; const int MAXN = 20; //const int INF = 0x3fffffff;999 const int INF = 99999; int n,a[MAXN][MAXN],b[MAXN][MAXN]; int Judge(int m) { //memset(b,0,sizeof(b)); int tmp=0; for(int i=0;i =0)sum+=b[i-1][j-1]; if(j+1 =0)sum+=b[i-2][j]; if(sum%2) { if(!b[i][j]) { b[i][j]=1; tmp++; } //else 這種情況太二逼了 我居然沒發現這個bug // return INF; } else { if(b[i][j] == 1) return INF; } } // 這種寫法是有問題的,因為 /*以上的步驟都沒有檢測最後一行,一下測試最後一行*/ for(int i=0;i =0)sum+=b[n-2][i]; if(i>0)sum+=b[n-1][i-1]; if(i+1