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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

递归,记忆化搜索,(棋盘分割)

發布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归,记忆化搜索,(棋盘分割) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

Problem:?1191Memory:?568KTime:?16MSLanguage:?C++Result:?Accepted

解題報告:

1、公式可以利用數學方法化簡,就是求各個矩陣上的數(的和)的平方和最小。

2、每一次分割都有四種情況(遞歸)。

3、每一次分割的位置要進行比較,從而找到最佳。

#include <stdio.h> #include <math.h> #include <algorithm> #include <string.h>using namespace std;int s[9][9];//每個格子的分數 int sum[9][9];//(1,1)到(i,j)的矩形分數的和 int res[15][9][9][9][9];//fun的記錄表int calsum(int x1,int y1,int x2,int y2)//(x1,y1)到(x2,y2)的矩形分數和 {return sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1]; }int fun(int n,int x1,int y1,int x2,int y2)//以(x1,y1)為左上角,(x2,y2)為右下角的矩形的棋盤分割成n分后的最小平方和 {int t,a,b,c,e;int MIN=0x3f3f3f3f;if(res[n][x1][y1][x2][y2]!=-1)return res[n][x1][y1][x2][y2];if(n==1){t=calsum(x1,y1,x2,y2);res[n][x1][y1][x2][y2]=t*t;return t*t;}for(a=x1;a<x2;a++){c=calsum(a+1,y1,x2,y2);//右邊的矩陣的和e=calsum(x1,y1,a,y2);//左邊的矩陣的和t=min(fun(n-1,x1,y1,a,y2)+c*c,fun(n-1,a+1,y1,x2,y2)+e*e);if(MIN>t) MIN=t;}for(b=y1;b<y2;b++){c=calsum(x1,b+1,x2,y2);//下面的矩陣的和e=calsum(x1,y1,x2,b);//上面的矩陣的和t=min(fun(n-1,x1,y1,x2,b)+c*c,fun(n-1,x1,b+1,x2,y2)+e*e);if(MIN>t) MIN=t;}res[n][x1][y1][x2][y2]=MIN;return MIN; }int main() {memset(sum,0,sizeof(sum));memset(res,-1,sizeof(res));int n;scanf("%d",&n);for(int i=1;i<9;i++){for(int j=1,rowsum=0;j<9;j++){scanf("%d",&s[i][j]);rowsum=rowsum+s[i][j];sum[i][j]=sum[i-1][j]+rowsum;}}double result=n*fun(n,1,1,8,8)-sum[8][8]*sum[8][8];printf("%.3f\n",sqrt(result/(n*n)));return 0; }

?

?

轉載于:https://www.cnblogs.com/TreeDream/p/5203214.html

總結

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

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