日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

棋盘分割

發布時間:2024/1/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 棋盘分割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

終于過了。

題目:http://poj.org/problem?id=1191

dp,水平有限,想不清更新順序,所以打的記憶化,

f[n,x,y,xx,yy]表示還剩下n塊,以及還剩下的這部分的左上角右下角坐標,所存儲的最優值

需要對公式變形為n*σ*σ=Σ(xi-x )^2,維護的即為各項的和

代碼:

program sky; constmaxn = 10000000; vari,j,n,x:longint;ave:extended;a:array[0..8,0..8] of longint;f:array[0..16,0..9,0..9,0..9,0..9] of extended; function min(qq,ww:extended):extended; beginif qq>ww then exit(ww); exit(qq); end; function get(x,y,xx,yy:longint):extended; vartp:longint; begintp:=a[xx,yy]-a[x-1,yy]-a[xx,y-1]+a[x-1,y-1];get:=sqr(tp-ave); end; function dp(n,x,y,xx,yy:longint):extended; vari:longint; beginif f[n,x,y,xx,yy]<>0 then exit(f[n,x,y,xx,yy]);if n=1 thenbeginf[n,x,y,xx,yy]:=get(x,y,xx,yy);exit(f[n,x,y,xx,yy]);end;f[n,x,y,xx,yy]:=maxn;for i:=x to xx-1 do{題目的限制只用遞歸一邊,另一邊不再切割}begin{一開始加了一些限制條件,比如(i-x+1>=n)才搜,后來發現不對}{因為加上會丟狀態,有可能橫著切不了豎著可以切}f[n,x,y,xx,yy]:=min(f[n,x,y,xx,yy],dp(n-1,x,y,i,yy)+dp(1,i+1,y,xx,yy));f[n,x,y,xx,yy]:=min(f[n,x,y,xx,yy],dp(1,x,y,i,yy)+dp(n-1,i+1,y,xx,yy));end;for i:=y to yy-1 dobeginf[n,x,y,xx,yy]:=min(f[n,x,y,xx,yy],dp(n-1,x,y,xx,i)+dp(1,x,i+1,xx,yy));f[n,x,y,xx,yy]:=min(f[n,x,y,xx,yy],dp(1,x,y,xx,i)+dp(n-1,x,i+1,xx,yy));end;exit(f[n,x,y,xx,yy]); end; beginassign(input,'fgqp.in'); reset(input);assign(output,'fgqp.out'); rewrite(output);readln(n);for i:=1 to 8 dofor j:=1 to 8 dobeginread(x);a[i,j]:=a[i-1,j]+a[i,j-1]-a[i-1,j-1]+x;end;ave:=a[8,8]/n;writeln(sqrt(dp(n,1,1,8,8)/n):0:3);close(input); close(output); end.

轉載于:https://www.cnblogs.com/skysun/archive/2012/05/24/2516286.html

總結

以上是生活随笔為你收集整理的棋盘分割的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。