time limit: 10 sec memory limit: 162 mb
submit: 623 solved: 449
[submit][status][discuss]將乙個a*b的數字矩陣進行如下分割:將原矩陣沿某一條直線分割成兩個矩陣,再將生成的兩個矩陣繼續如此分割(當然也可以只分割其中的乙個),這樣分割了(n-1)次後,原矩陣被分割成了n個矩陣。(每次分割都只能沿著數字間的縫隙進行)原矩陣中每一位置上有乙個分值,乙個矩陣的總分為其所含各位置上分值之和。現在需要把矩陣按上述規則分割成n個矩陣,並使各矩陣總分的均方差最小。請程式設計對給出的矩陣及n,求出均方差的最小值。
第一行為3個整數,表示a,b,n(1第二行至第n+1行每行為b個小於100的非負整數,表示矩陣中相應位置上的分值。每行相鄰兩數之間用乙個空格分開。
僅乙個數,為均方差的最小值(四捨五入精確到小數點後2位)
5 4 4
2 3 4 6
5 7 5 1
10 4 0 5
2 0 2 3
4 1 1 1
0.50
題解:資料好小,顯然記憶化爆搜即可嘍。。。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!多維陣列是不能用sizeof賦值的!!!!!!!!!!!!!!!!!!!
!!!啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8#define pau putchar(' ')
9#define ent putchar('\n')
10using
namespace
std;
11const
int maxn=10+3,inf=-1u>>1;12
double
s[maxn][maxn],t[maxn][maxn][maxn][maxn][maxn],ve;
13int
n,m,k;
14double sqr(double a)
15double size(int x1,int y1,int x2,int
y2)18
double dfs(int x1,int y1,int x2,int y2,int
k)30 inline int
read()
36 inline void write(int
x)if(x<0)putchar('
-'),x=-x;
38int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;39
for(int i=len-1;i>=0;i--)putchar(buf[i]+'
0');return;40
}41intmain()
57/*
584 4 1
591 4 2 3
601 5 3 3
61-1 6 3 3
622 5 2 1
631 1 2 3
64*/
bzoj1048 HAOI2007 分割矩陣
將乙個a b 的數字矩陣進行如下分割 將原矩陣沿某一條直線分割成兩個矩陣,再將生成的兩個矩陣繼續如此分割 當然也可以只分割其中的乙個 這樣分割了 n 1 次後,原矩陣被分割成了 n 個矩陣。每次分割都只能沿著數字間的縫隙進行 原矩陣中每一位置上有乙個分值,乙個矩陣的總分為其所含各位置上分值之和。現在...
BZOJ1048 HAOI2007 分割矩陣
將乙個a b的數字矩陣進行如下分割 將原矩陣沿某一條直線分割成兩個矩陣,再將生成的兩個矩陣繼續如此 分割 當然也可以只分割其中的乙個 這樣分割了 n 1 次後,原矩陣被分割成了n個矩陣。每次分割都只能 沿著數字間的縫隙進行 原矩陣中每一位置上有乙個分值,乙個矩陣的總分為其所含各位置上分值之和。現在需...
BZOJ1055 HAOI 玩具取名
某人有一套玩具,並想法給玩具命名。首先他選擇wing四個字母中的任意乙個字母作為玩具的基本名字。然後 他會根據自己的喜好,將名字中任意乙個字母用 wing 中任意兩個字母代替,使得自己的名字能夠擴充得很長。現在,他想請你猜猜某乙個很長的名字,最初可能是由哪幾個字母變形過來的。第一行四個整數w i n...