• hdu 5492 (暴力+nice)


    题意:在矩阵中,找一条路从 (1,1)->(n,m),使方差最小

    思路: T = (N+M1)N+M1i=1(AiAavg)2

    将N + M - 1乘进去,即求1 ~ N+M-1,(N + M - 1)*A[i] - (A[i] + ..... + A[N]) 的和由于

    假设Aavg可以是任何数,但只有当其是平均值时T才会最小(感觉别人都好厉害 /(ㄒoㄒ)/~~)


    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <cstdlib>
    #include <time.h>
    #include <algorithm>
    typedef long long ll;
    using namespace std;
    int a[35][35],f[35][35];
    int n,m;
    int fin(int x)
    {
        int N = n+m-1;
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= m; j++)
            {
                if(i == 1 && j == 1)
                    f[i][j] = (N*a[i][j]-x)*(N*a[i][j] - x);
                else if(i == 1)
                    f[i][j] = f[i][j-1] + (N*a[i][j]-x)*(N*a[i][j] - x);
                else if(j == 1)
                    f[i][j] = f[i-1][j] + (N*a[i][j]-x)*(N*a[i][j] - x);
                else
                    f[i][j] = min(f[i-1][j],f[i][j-1]) + (N*a[i][j]-x)*(N*a[i][j] - x);
            }
            return f[n][m]/N;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        for(int i = 1; i <= T; i++)
        {
            scanf("%d%d",&n,&m);
            for(int k = 1; k <= n; k++)
                for(int j = 1; j <= m; j++)
                {
                    scanf("%d",&a[k][j]);
                }
            int ans = 10000000;
            for(int k = 1; k <= 2000; k++)
            {
                ans = min(ans,fin(k));
            }
            printf("Case #%d: %d
    ",i,ans);
        }
    }
    

      


    ps.我们需要的仅仅是不停找借口让自己坚持下去











  • 相关阅读:
    清源CPM代码复现
    图像分类模型
    分享-微软亚洲研究院:NLP将迎来黄金十年
    表格生成本文-代码实践-data2text-plan-py
    了解一下BigBird
    《BERT模型精讲》徐路
    精读论文的步骤
    使用预训练编码器生成文本摘要
    Heap/Perm space
    静态代码块,代码块
  • 原文地址:https://www.cnblogs.com/Przz/p/5409742.html
Copyright © 2020-2023  润新知