zoukankan      html  css  js  c++  java
  • 【洛谷P1005】矩阵取数游戏

    矩阵取数游戏

    题目链接

    每行分别跑一趟区间DP即可

    这道题区间DP是非常裸的,按套路来即可

    但是很毒瘤的是需要高精度,

    “我王境泽就是爆零,从这跳下去,也不会用__int128的!”

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 #define int __int128  //真香
     6 #define reset(a) memset(a,0,sizeof(a))
     7 #define N 85
     8 int n,m,a[N],ans,f[N][N];
     9 int b[N];
    10 inline int read(){
    11     int x=0; char c=getchar();
    12     while(c<'0'||c>'9') c=getchar();
    13     while('0'<=c&&c<='9') { x=(x<<3)+(x<<1)+c-'0'; c=getchar(); }
    14     return x;
    15 }
    16 inline void print(int x){
    17     if(x>9) print(x/10);
    18     putchar(x%10+'0');
    19 }
    20 #undef int
    21 int main()
    22 #define int __int128
    23 {
    24     n=read(); m=read();
    25     b[0]=1;
    26     for(int i=1;i<=m;i++)
    27      b[i]=b[i-1]<<1;
    28     for(int i=1;i<=n;i++){
    29         for(int j=1;j<=m;j++)
    30          a[j]=read();
    31         reset(f);
    32         for(int len=m-1;len>=1;len--)
    33          for(int l=1;l+len-1<=m;l++){
    34             int r=l+len-1,&d=f[l][r];
    35             int t=b[m-len];
    36             d=f[l][r+1]+a[r+1]*t;
    37             d=max(d,f[l-1][r]+a[l-1]*t);
    38          }
    39         int maxx=0;
    40         for(int i=1;i<=m;i++)
    41          maxx=max(maxx,f[i][i]+a[i]*b[m]);
    42         ans+=maxx;
    43     }
    44     print(ans);
    45     return 0;
    46 }
  • 相关阅读:
    分数序列规律求和
    猴子吃桃算法
    猴子吃桃算法
    完数
    完数
    数字个数依次叠加 s=a+aa+aaa+aaaa+aa...a
    数字个数依次叠加 s=a+aa+aaa+aaaa+aa...a
    hbase(二)Java操作 hbase
    hbase scan startrow endrow 是否包括
    ListOrderedMap和Map
  • 原文地址:https://www.cnblogs.com/yjkhhh/p/9359673.html
Copyright © 2011-2022 走看看