zoukankan      html  css  js  c++  java
  • poj 1191 棋盘分割

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

    这道题先是预处理,在dp处理。

    dp[k][x1][y1][x2][y2]=min(min(dp[k+1][x1][y1][a][y2]+s[a+1][y1][x2][y2],dp[k+1][a+1][y1][x2][y2]+s[x1][y1][a][y2]),min(dp[k+1][x1][y1][x2][b]+s[x1][b][x2][y2],dp[k+1][x1][b+1][x2][y2]+s[x1][y1][x2][b]);

     1 #include <cstdio>
     2 #include <cmath>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <algorithm>
     6 using namespace std;
     7 const int inf=1<<30;
     8 
     9 int dp[15][15][15][15][15];
    10 int g[20][20];
    11 int ans[20][20][20][20];
    12 int n;
    13 
    14 void inti()
    15 {
    16     for(int x=0; x<9; x++)
    17     {
    18         for(int y=0; y<9; y++)
    19         {
    20             for(int x1=x; x1<9; x1++)
    21             {
    22                 for(int y1=y; y1<9; y1++)
    23                 {
    24                     int c=0;
    25                     for(int i=x; i<=x1; i++)
    26                     {
    27                         for(int j=y; j<=y1; j++)
    28                         {
    29                             c+=g[i][j];
    30                         }
    31                     }
    32                     ans[x][y][x1][y1]=c*c;
    33                     ans[x1][y1][x][y]=c*c;
    34                     ans[x][y1][x1][y]=c*c;
    35                     ans[x1][y][x][y1]=c*c;
    36                 }
    37             }
    38         }
    39     }
    40 }
    41 
    42 int deal(int k,int x1,int y1,int x2,int y2)
    43 {
    44     if(dp[k][x1][y1][x2][y2]>=0) return dp[k][x1][y1][x2][y2];
    45     if(k==n-1) return ans[x1][y1][x2][y2];
    46     dp[k][x1][y1][x2][y2]=inf;
    47     int ans1=0;
    48     for(int a=x1; a<x2; a++)
    49     {
    50         ans1=min(deal(k+1,x1,y1,a,y2)+ans[a+1][y1][x2][y2],deal(k+1,a+1,y1,x2,y2)+ans[x1][y1][a][y2]);
    51         dp[k][x1][y1][x2][y2]=min(dp[k][x1][y1][x2][y2],ans1);
    52     }
    53     for(int b=y1; b<y2; b++)
    54     {
    55         ans1=min(deal(k+1,x1,y1,x2,b)+ans[x1][b+1][x2][y2],deal(k+1,x1,b+1,x2,y2)+ans[x1][y1][x2][b]);
    56         dp[k][x1][y1][x2][y2]=min(dp[k][x1][y1][x2][y2],ans1);
    57     }
    58     return dp[k][x1][y1][x2][y2];
    59 }
    60 
    61 int main()
    62 {
    63     while(scanf("%d",&n)!=EOF)
    64     {
    65         memset(dp,-1,sizeof(dp));
    66         int cnt=0;
    67         for(int i=0; i<8; i++)
    68         {
    69             for(int j=0; j<8; j++)
    70             {
    71                 scanf("%d",&g[i][j]);
    72                 cnt+=g[i][j];
    73             }
    74         }
    75         inti();
    76         deal(0,0,0,7,7);
    77         printf("%.3f
    ",sqrt((dp[0][0][0][7][7]*1.0)/n-((cnt*1.0)/n)*((cnt*1.0)/n)));
    78     }
    79     return 0;
    80 }
    View Code
  • 相关阅读:
    根分区/tmp满了,卸载home添加给根分区
    Docker容器技术教程
    使用vscode访问和编辑远程服务器文件
    使用 VS Code 远程连接Linux服务器告别xshell
    Docker安装参考文档记录
    yolov5在Centos系统上部署的环境搭建
    YOLOV5四种网络结构的比对
    k8s部署kube-state-metrics组件
    Kubernetes集群部署Prometheus和Grafana
    Prometheus介绍
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3780769.html
Copyright © 2011-2022 走看看