zoukankan      html  css  js  c++  java
  • 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.我们需要的仅仅是不停找借口让自己坚持下去











  • 相关阅读:
    常用汇编指令大全
    Qt信号槽-连接方式
    QtAssiant-QComboBox
    解决Qt-至少需要一个有效且已启用的储存库 问题
    qt插件化开发
    qml----定位信息
    多媒体(音乐、视频播放器,相机)
    qml----Model/View入门(九)Repeater
    qml----Model/View入门(八)PathView
    qml----Model/View入门(七)GridView
  • 原文地址:https://www.cnblogs.com/Przz/p/5409742.html
Copyright © 2011-2022 走看看