BZOJ 1048 HAOI2007 分割矩陣

2022-05-23 02:27:10 字數 1660 閱讀 5686

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...