传送门

题目描述:

给你一个n*m的矩阵,你需要从左上角走到右下角,你每次只能向下或者向右走,并且不能走出矩阵之外。

只要你走到终点之后,你就会获得奖励,奖励的金额为:所有经过的元素做“与”运算(津巴韦布)。

帮自己算一算,你能获得的最大奖励金额为多少呢?

与运算:0&0=0 , 0&1=0 , 1&0=0 , 1&1=1

例:假设你从左上角到右下角(包括左上角和右下角)经过的元素为:2,2,3,2。你的奖励金额为:(2 & 2 & 3 & 2)= 2

输入
第一行输入两个整数 n和m 分别代表矩阵的行数和列数。

接下来输入n行,每行m个数,分别为矩阵的每个元素。

n <= 1000 , m <= 1000

且矩阵的元素 0 <= g[i][j] <= 1e9

输出
输出一个数字,能获得的最大金额。

最开做这个题我当然就是想当然的忽略了&运输的原则规律,欻欻欻的就写完,样例一过就提交,然后当然就是555啦。嗐比赛的时候大脑都是迟钝的。
赛时代码:

signed main()
{IOS;cin >> n >> m;for(int i = 1; i <= n; i ++)for(int j = 1; j <= m; j ++)cin >> a[i][j];dp[1][1] = a[1][1];for(int i = 1; i <= n; i ++){for(int j = 1; j <= m; j ++){if(i > 1) dp[i][j] = max(dp[i][j], a[i - 1][j] & a[i][j]);if(j > 1) dp[i][j] = max(dp[i][j], a[i][j - 1] & a[i][j]);//cout << dp[i][j] << " ";}//cout << endl;}cout << dp[n][m] << endl;return 0;
}

其实赛后细想知道:真正的max是满足整个路径元素同时&,以上的做法只能满足(i,j)以前的路径的max,而dp[n - 1][m - 1]的max是会影响dp[n][m]的值。

正解思路:

  • 因为 2 ^ i > (2 ^ (i - 1) + 2 ^ (i - 2) + …… + 2 ^ 0),所有可以用贪心的策略,从高位开始枚举考虑,时间复杂度就为O(32 * n * n)。
  • 从左上角到右下角考虑的过程中,为了首先以保存高位为条件,那么下一次必须从可以满足高位的路径走。

代码实现:

#include<bits/stdc++.h>
#define endl '\n'
#define null NULL
#define ll long long
#define int long long
#define pii pair<int, int>
#define lowbit(x) (x &(-x))
#define ls(x) x<<1
#define rs(x) (x<<1+1)
#define me(ar) memset(ar, 0, sizeof ar)
#define mem(ar,num) memset(ar, num, sizeof ar)
#define rp(i, n) for(int i = 0, i < n; i ++)
#define rep(i, a, n) for(int i = a; i <= n; i ++)
#define pre(i, n, a) for(int i = n; i >= a; i --)
#define IOS ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);
const int way[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
using namespace std;
const int  inf = 0x7fffffff;
const double PI = acos(-1.0);
const double eps = 1e-6;
const ll   mod = 1e9 + 7;
const int  N = 1005;int n, m, ans;
int a[N][N], dp[N][N];signed main()
{IOS;cin >> n >> m;for(int i = 1; i <= n; i ++)for(int j = 1; j <= m; j ++)cin >> a[i][j];for(int k = 31; ~k; k --){if(a[1][1] & (1 << k)){me(dp);//先保存高位dp[1][1] = 1 << k;for(int i = 1; i <= n; i ++){for(int j = 1; j <= m; j ++){if(dp[i][j]){//必须能满足保存高位if(i + 1 <= n && (a[i + 1][j] & ans) == ans)dp[i + 1][j] = a[i + 1][j] & (1 << k);if(j + 1 <= m && (a[i][j + 1] & ans) == ans)dp[i][j + 1] = a[i][j + 1] & (1 << k);}}}if(dp[n][m]) ans += (1 << k);}}cout << ans << endl;return 0;
}

SCPC :普普通通的DP(位运算)相关推荐

  1. 【CodeForces 1042B --- Vitamins】DP+位运算

    [CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...

  2. 洛谷P1896 [SCOI2005]互不侵犯 状压dp+位运算

    题目链接:https://www.luogu.org/problem/P1896 题意:n*n的格子填数,每个数填放位置的周围(8个)不能有其他的数 n<=9 ,矩形状压 f[i][j][s], ...

  3. 2021牛客暑期多校训练营5 E-Eert Esiwtib(树形dp+位运算)

    E-Eert Esiwtib 位运算考虑贡献时分0/1按位模拟考虑 fu,0/1/2f_{u,0/1/2}fu,0/1/2​表示子树u中点(包括u)到u所有路径的或/与/异或值. 转移的时候我们要考虑 ...

  4. codeforces1670F Jee, You See?(DP/位运算/前缀和/组合数)

    题目链接:codeforces 1670F 题目思路: 首先,对于 sum,有 s u m = a 1 + a 2 + ⋯ + a n sum = a_1 + a_2 + \cdots + a_n s ...

  5. 《位运算技巧以及Leetcode的一些位运算题目》

    目录 技巧 练习位运算 [461. 汉明距离](https://leetcode-cn.com/problems/hamming-distance/) [190. 颠倒二进制位](https://le ...

  6. 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp

    文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...

  7. 【洛谷 P4934】 礼物 (位运算+DP)

    题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...

  8. [CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)

    problem cf链接 solution 读完题先直接暴力 dpdpdp 拿出来,dpi=max⁡j<i{dpj+(fi&fj)}dp_i=\max_{j<i}\big\{dp_ ...

  9. bzoj5108 [CodePlus2017]可做题 位运算dp+离散

    [CodePlus2017]可做题 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 87  Solved: 63 [Submit][Status][D ...

最新文章

  1. jquery遍历json的几种方法
  2. IAR环境下STM32+IAP方案的实现(转)
  3. jenkins 下载插件 一直失败_Jenkins. 安装错误: No such plugin: cloudbees-folder
  4. Leetcode No.145 **
  5. 【JZOJ3636】【BOI2012】Mobile(mobile)
  6. creator qt 设置换行方式_win下使用QT添加VTK插件实现点云可视化GUI
  7. 深度评测阿里云、百度云、腾讯云和华为云
  8. Python风格总结:模块调用
  9. Git教程——merge 分支冲突
  10. try catch中getRequestDispatcher跳转
  11. InDesign 软件教程,如何新建文档?
  12. 上海 day16 -- python 常用模块1
  13. vue显示服务器目录,vue-cli 静态资源在另一台服务器上.要如何配置路径
  14. 威纶触摸屏宏指令编程,字符串相关函数介绍与使用...
  15. web前端性能优化总结 1
  16. java 根据ftl文件生成word
  17. ESP8266 在Arduino 使用ST7789 OLED
  18. 10. logback详解,Flink流处理案例及Hive和Hbase的整合
  19. SDNU_ACM_ICPC_2020_Winter_Practice_2nd C 离散化, lower_bound
  20. Android亮度调节

热门文章

  1. 举头望明月,低头敲代码
  2. k8s调度:亲和度、容忍度
  3. 彩色图像的直方图绘制
  4. 9.27 英语听力练习
  5. 分布式原理:一文了解 Gossip 协议
  6. STM32实战③RGB渐变
  7. 接收信号强度值dbm分析
  8. 上海网站排名优化找哪家?清法网络助你一臂之力
  9. 深耕边缘计算 揭秘阿里云边缘云网一体化的技术实践
  10. 利用DICOM文件实现2D与3D体素坐标之间的转换