• T7315 yyy矩阵折叠(长)


    题目背景

    全场基本暴零

    题目描述

    输入输出格式

    输入格式:

    如图

    输出格式:

    如图

    输入输出样例

    输入样例#1:
    2 2
    1 -2
    3 -4
    输出样例#1:
    4
    输入样例#2:
    2 5
    1 -2 -3 4 -5
    6 -7 -8 9 -10
    输出样例#2:
    20

    说明

    如图

    DFS行,状压DP列

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<stack>
     8 #include<cstdlib>
     9 using namespace std;
    10 const int maxn=0x7fffff;
    11 inline void read(int &n)
    12 {
    13     char c='+';int x=0;bool flag=0;
    14     while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
    15     while(c>='0'&&c<='9')
    16     x=(x<<1)+(x<<3)+c-48,c=getchar();
    17     flag==1?n=-x:n=x;
    18 }
    19 int n,m; 
    20 int a[99][501];
    21 int ans=-maxn;
    22 int cur[501];
    23 int pos2(int x)
    24 {
    25     return (1<<x);
    26 }
    27 int dp(int zt)
    28 {
    29     memset(cur,0,sizeof(cur));
    30     int ou,ji;
    31     for(int i=1;i<=n;i++)
    32         if(zt&pos2(i))
    33             for(int j=1;j<=m;j++)
    34                 cur[j]+=a[i][j];
    35     bool flag=1;
    36     for(int i=1;i<=m;i++)
    37         if(cur[i]>0)
    38         {
    39             flag=0;
    40             break;
    41         }
    42     if(flag)
    43         return -maxn;
    44     ou=0;ji=0;
    45     for(int i=1;i<=m;i++)
    46     {
    47         if(i&1)
    48         {
    49             int x=cur[i]+ou;
    50             ji=max(ji,x);
    51         }
    52         else
    53         {
    54             int x=cur[i]+ji;
    55             ou=max(ou,x);
    56         }
    57     }
    58     return max(ou,ji);
    59 }
    60 void dfs(int pos,int last,int zt)
    61 {
    62     if(pos==n+1)
    63     {
    64         ans=max(ans,dp(zt));
    65         return ;
    66     }
    67 
    68         if(last==-1||(pos-last)&1)
    69             dfs(pos+1,pos,zt|pos2(pos));
    70     dfs(pos+1,last,zt);
    71 }
    72 int main()
    73 {
    74     read(n);read(m);
    75     for(int i=1;i<=n;i++)
    76         for(int j=1;j<=m;j++)
    77         {
    78             read(a[i][j]);
    79             ans=max(ans,a[i][j]);
    80         }
    81     if(ans<0)    
    82     cout<<ans;
    83     else
    84     {
    85         dfs(1,-1,0);
    86         printf("%d",ans);
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    javascript Date format(js日期格式化)
    WebService中方法的重载
    win10 剪贴板 拒绝访问 Cannot open clipboard
    win10 剪贴板 拒绝访问
    Image Base64 Datasnap Image delphi与c#互相兼容识别
    app 支付宝 支付 alipaySdk
    Java2OP
    delphi action学习
    FireDAC 超时
    TCheckListBox
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7185970.html
Copyright © 2020-2023  润新知