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 }
时间: 2024-08-06 11:53:39

T7315 yyy矩阵折叠(长)的相关文章

【杨氏矩阵+勾长公式】POJ 2279 Mr. Young&#39;s Picture Permutations

Description Mr. Young wishes to take a picture of his class. The students will stand in rows with each row no longer than the row behind it and the left ends of the rows aligned. For instance, 12 students could be arranged in rows (from back to front

1007 正整数分组 1010 只包含因子2 3 5的数 1014 X^2 Mod P 1024 矩阵中不重复的元素 1031 骨牌覆盖

1007 正整数分组 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量. 第2 - N+1行,N个正整数. (N <= 100, 所有正整数的和 <= 10000) Output 输出这个最小差 Input示例 5 1 2 3 4 5 Output示例 1这题不就是小李打怪兽吗,不知道谁模仿谁,呵呵,刚还是我编的题里的,dp,证明一下(要证明什么自

那条矩阵乘法的不归路——数列

话说今天搜矩阵相乘,没有一个人用pascal写,是不是学到矩阵相乘的孩子都果断转c++了...我可是有良心的写博人,当然附上pascal代码 故事开始了 今天看到这样一个题 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1]  (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 然后是它的数据范围 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,n<=2*10^9: 当我

51 NOD 1024 矩阵中不重复的元素(技巧)

传送门 1024 矩阵中不重复的元素 题目来源: Project Euler 一个m*n的矩阵. 该矩阵的第一列是a^b,(a+1)^b,-..(a + n - 1)^b 第二列是a^(b+1),(a+1)^(b+1),-..(a + n - 1)^(b+1) --. 第m列是a^(b + m - 1),(a+1)^(b + m - 1),-..(a + n - 1)^(b + m - 1) (a^b表示a的b次方) 下面是一个4*4的矩阵: 2^2=4, 2^3=8, 2^4=16, 2^5=

1050. 螺旋矩阵(25) pat乙级题

本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m-n取所有可能值中的最小值. 输入格式: 输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数.所有数字不超过104,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行n个数字,共m行.相邻数字以1个空格分隔,行末不得有多余空格. 输入样例: 12 37 76 20 98 76 42 53 95

loj #100. 矩阵乘法

题目描述 这是一道模板题. 分别给定 n×p n \times pn×p 和 p×m p \times mp×m 的两个矩阵 A AA 和 B BB,求 A×B A \times BA×B. 输入格式 第一行三个正整数 n nn.p pp.m mm,表示矩阵的长宽.之后的 n nn 行,每行 p pp 个整数,表示矩阵 A AA.之后的 p pp 行,每行 m mm 个整数,表示矩阵 B BB. 输出格式 输出 n nn 行,每行 m mm 个整数,表示矩阵 A×B A \times BA×B,

转载 matlab矩阵数组常用操作

一. length             返回矩阵最长维的的长度    ndims       返回维数          numel      返回矩阵元素个数size               返回每一维的长度,[rows,cols]=size(A) 矩阵块操作 1.repmat() 数组块状复制 2.blkdiag()对角块生成函数 3.kron()直积 二.矩阵元素的提取与替换 (1)提取 A(i, j) :矩阵 A 中,位于第 i 横列.第 j 直行的元素用冒号(:), 取出一整列

Matlab permute( )函数 &amp; 矩阵A 和矩阵A&#39; 的差别 &amp; imresize( )函数

Matlab  图像处理 Day9: 1.permute( ): % permute 函数功能是重新排列数组,可以交换数组的维数 % 对于二维数组而言.可以利用 permute 函数对矩阵进行转置 Sample: 2.矩阵A 和矩阵A'之间的差别: A' 是举证 A 的转置矩阵. 3.imresize( ): % 函数用于缩放处理 % 其一般形式为  <i> B = imresize(A, m) B矩阵的长宽变成A矩阵的m倍,若 m > 1 ,则 B 为 A 的放大图像 若 m <

51nod 1024 矩阵中不重复的元素(质因数分解+map判重)

1024 矩阵中不重复的元素 题目来源: Project Euler 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 取消关注 一个m*n的矩阵. 该矩阵的第一列是a^b,(a+1)^b,.....(a + n - 1)^b 第二列是a^(b+1),(a+1)^(b+1),.....(a + n - 1)^(b+1) ....... 第m列是a^(b + m - 1),(a+1)^(b + m - 1),.....(a + n - 1)^(b +