將乙個8*8的棋盤進行如下分割:
將原棋盤割下一塊矩形棋盤並使剩下部分也是矩形,
再將剩下的部分繼續如此分割, 這樣割了(n-1)次後,
連同最後剩下的矩形棋盤共有n塊矩形棋盤.
(每次切割都只能沿著棋盤格仔的邊進行)
允許的分割方案 2
不允許的分割方案 原棋盤上每一格有乙個分值,
一塊矩形棋盤的總分為其所含各格分值之和
現在需要把棋盤按上述規則分割成 n 塊矩形棋盤,
並使各矩形棋盤總分的均方差最小
均方差 , 其中平均值 ,
xi 為第 i 塊矩形棋盤的總分
請程式設計對給出的棋盤及 n, 求出 σ 的最小值
第1行為乙個整數n (1 < n < 15)
第2行至第9行每行為8個小於100的非負整數, 表示棋盤上
相應格仔的分值
每行相鄰兩數之間用乙個空格分隔
輸出 僅乙個數, 為σ (四捨五入精確到小數點後三位)
4 樣例輸入
3 1 1 1 1 1 1 1 3
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0
1 1 1 1 1 1 0 3
樣例輸出
這個題和以前做過的挑戰程式設計裡面的分棒子差不多,都是遞迴的解決問題,不算很難。
#include
#include
using namespace std;
const int maxnum = 9;
double getresult(int n,int x1,int y1,int x2,int y2);
int tmpresult[15][maxnum][maxnum][maxnum][maxnum];
int board[maxnum][maxnum];
int gradesum[maxnum][maxnum];
int calsum(int x1,int y1,int x2,int y2);
int main()
}double result = n*getresult(n,1,1,8,8)-gradesum[8][8]*gradesum[8][8];
cout}double getresult(int n,int x1,int y1,int x2,int y2)
for(vertical = x1;vertical < x2;line++)
for(line = y1;line < y2;line++)
tmpresult[n][x1][y1][x2][y2] = minnum;
return minnum;
}
A 棋盤問題
在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個空格隔開,表示了將在乙個n n...
A 棋盤問題
在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個空格隔開,表示了將...
遞迴 回溯 馬踏棋盤問題
將馬隨機放在西洋棋的board 0 n 1 0 n 1 的某個方格中,馬按走棋規則進行移動。走遍棋盤上全部n n個方格。編制遞迴程式,求出馬的行走路線,並按求出的行走路線,將數字1,2,n n依次填入乙個n n的方陣,輸出之。輸入 棋盤的大小n n 10 馬的初始位置 i,j 1 i n,1 j n...