zoukankan      html  css  js  c++  java
  • P1005 [NOIP2007 提高组] 矩阵取数游戏

    P1005 [NOIP2007 提高组] 矩阵取数游戏

    题目输入输出

    输入
    
    2 3
    1 2 3
    3 4 2
    
    输出
    
    82

    我寻思这不就是一道普普通通的dp吗,然后被500多亿大的数据给毒打了,高精度就涉及到我的知识盲区了 _int128 真是个神奇的东西, 不过需要手动输入输出一下

    #include <iostream>
    #include <vector>
    #include <cstring>
    using namespace std;
    
    const int MAXN = 85;
    
    __int128 v[MAXN][MAXN];
    __int128 dp[MAXN][MAXN];
    
    __int128 func(int l, int m){
        memset(dp, 0, sizeof(dp));
        __int128 ans = 0;
        for(int i = 0; i < m; i++){
            for(int j = m; j >= i; j--){
                int cnt = m - (j - i);
                if(i == 0)
                    dp[i][j] = dp[i][j + 1] + (v[l][j] << cnt);
                else
                    dp[i][j] = max(dp[i - 1][j] + (v[l][i - 1] << cnt), dp[i][j + 1] + (v[l][j] << cnt));
            }
            if(dp[i][i] > ans)
                ans = dp[i][i];
        }
        return ans;
    }
    inline void input(__int128 &s)
    {
        s=0;
        char c=' ';
        while(c>'9'||c<'0') c=getchar();
        while(c>='0'&&c<='9')
        {
            s=s*10+c-'0';
            c=getchar();
        }
    }
    inline void output(__int128 x)
    {
        if(x>9)
            output(x/10);
        putchar(x%10+'0');
    }
    int main(){
        int m, n;
        cin >> n >> m;
        memset(v, 0, sizeof(v));
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                input(v[i][j]);
            }
        }
        __int128 ans = 0;
        //memset(dp, 0, sizeof(dp));
        
        for(int i = 0; i < n; i++){
            ans += func(i, m);
        }
        output(ans);
        return 0;
    }
  • 相关阅读:
    闰年测试
    EditBox的测试用例设计
    测试工程中的评审
    测试框架
    github
    第一次上机实验
    对软件测试的初步认识
    白盒测试
    Date : 日期对象
    C++ 格式化输出 及 输入 流
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/14627406.html
Copyright © 2011-2022 走看看