poj 1191 矩形块的划分

本文深入探讨了使用C++实现的复杂矩阵操作和动态规划解决实际问题的方法,通过实例展示了如何高效计算特定矩阵区域的平方和,并在不同阶段进行优化。文章详细解释了算法背后的逻辑,提供了清晰的代码实现和优化技巧。

思路:黑书的例题

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
#define Maxn 20
#define mul(a) ((a)*(a))
using namespace std;
int dp[16][9][9][9][9];
int s[10][10],val[10][10];
int S(int x1,int y1,int x2,int y2)
{
    return mul(s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1]);
}
int main()
{
    int n,m,i,j;
    double avg;
    while(scanf("%d",&n)!=EOF)
    {
        memset(dp,70,sizeof(dp));
        memset(s,0,sizeof(s));
        for(i=1;i<=8;i++)
            for(j=1;j<=8;j++){
            scanf("%d",&val[i][j]);
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+val[i][j];
        }
        int x1,y1,x2,y2;
        for(x1=1;x1<=8;x1++)
        for(y1=1;y1<=8;y1++)
        for(x2=x1;x2<=8;x2++)
        for(y2=y1;y2<=8;y2++){
            dp[0][x1][y1][x2][y2]=S(x1,y1,x2,y2);
        }
        int a,b;
        for(i=1;i<=n-1;i++)
        for(x1=7;x1>=1;x1--)
        for(y1=7;y1>=1;y1--)
        for(x2=x1;x2<=8;x2++)
        for(y2=y1;y2<=8;y2++){
            int temp;
            for(a=x1;a<x2;a++){
            temp=min(dp[i-1][x1][y1][a][y2]+S(a+1,y1,x2,y2),dp[i-1][a+1][y1][x2][y2]+S(x1,y1,a,y2));
            dp[i][x1][y1][x2][y2]=min(temp,dp[i][x1][y1][x2][y2]);
            }
            for(b=y1;b<y2;b++){
            temp=min(dp[i-1][x1][y1][x2][b]+S(x1,b+1,x2,y2),dp[i-1][x1][b+1][x2][y2]+S(x1,y1,x2,b));
            dp[i][x1][y1][x2][y2]=min(dp[i][x1][y1][x2][y2],temp);
            }
        }
        double ans;
        avg=s[8][8]*1.0/(n*1.0);
        ans=(double)dp[n-1][1][1][8][8];
        ans=ans/(n*1.0);
        ans-=avg*avg;
        printf("%.3lf\n",sqrt(ans));
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/wangfang20/p/3274123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值