[luoguP1005] 矩阵取数游戏(DP + 高精度)
传送门
和奶牛那个题很像,每一行状态互不影响,也就是求 n 遍DP
不过高精度非常恶心,第一次写,调了我一上午。
——代码
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 5 struct Big_int 6 { 7 int s[35], idx; 8 Big_int() 9 { 10 idx = 0; 11 memset(s, 0, sizeof(s)); 12 } 13 }; 14 15 int n, m; 16 Big_int ans, a[81], f[81][81]; 17 18 inline void clear(Big_int &x) 19 { 20 x.idx = 0; 21 memset(x.s, 0, sizeof(x.s)); 22 } 23 24 inline Big_int Big(int x) 25 { 26 Big_int ret; 27 while(x) 28 { 29 ret.s[ret.idx] = x % 10; 30 x /= 10; 31 ret.idx++; 32 } 33 return ret; 34 } 35 36 inline bool operator > (const Big_int x, const Big_int y) 37 { 38 int i; 39 if(x.idx > y.idx) return 1; 40 else if(x.idx < y.idx) return 0; 41 else for(i = x.idx - 1; i >= 0; i--) 42 if(x.s[i] > y.s[i]) return 1; 43 else if(x.s[i] < y.s[i]) return 0; 44 } 45 46 inline Big_int Max(const Big_int x, const Big_int y) 47 { 48 return x > y ? x : y; 49 } 50 51 inline int max(int x, int y) 52 { 53 return x > y ? x : y; 54 } 55 56 inline Big_int operator + (const Big_int x, const Big_int y) 57 { 58 int i; 59 Big_int ret; 60 ret.idx = max(x.idx, y.idx) + 1; 61 for(i = 0; i < ret.idx; i++) 62 { 63 ret.s[i] += x.s[i] + y.s[i]; 64 ret.s[i + 1] += ret.s[i] / 10; 65 ret.s[i] %= 10; 66 } 67 while(!ret.s[ret.idx - 1] && ret.idx > 1) ret.idx--; 68 return ret; 69 } 70 71 inline Big_int operator * (const Big_int x, const Big_int y) 72 { 73 int i, j; 74 Big_int ret; 75 ret.idx = x.idx + y.idx; 76 for(i = 0; i < x.idx; i++) 77 for(j = 0; j < y.idx; j++) 78 { 79 ret.s[i + j] += x.s[i] * y.s[j]; 80 ret.s[i + j + 1] += ret.s[i + j] / 10; 81 ret.s[i + j] %= 10; 82 } 83 while(!ret.s[ret.idx - 1] && ret.idx > 1) ret.idx--; 84 return ret; 85 } 86 87 inline void print(const Big_int x) 88 { 89 int i; 90 if(!x.idx) printf("0"); 91 else for(i = x.idx - 1; i >= 0; i--) printf("%d", x.s[i]); 92 puts(""); 93 } 94 95 inline int read() 96 { 97 int x = 0, f = 1; 98 char ch = getchar(); 99 for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1; 100 for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0'; 101 return x * f; 102 } 103 104 inline Big_int dp(int x, int y, Big_int z) 105 { 106 if(f[x][y].idx) return f[x][y]; 107 if(x == y) return f[x][y] = a[x] * z; 108 else return f[x][y] = Max(dp(x + 1, y, z * Big(2)) + a[x] * z, dp(x, y - 1, z * Big(2)) + a[y] * z); 109 } 110 111 int main() 112 { 113 int i, j; 114 n = read(); 115 m = read(); 116 while(n--) 117 { 118 for(i = 1; i <= m; i++) a[i] = Big(read()); 119 for(i = 1; i <= m; i++) 120 for(j = 1; j <= m; j++) 121 clear(f[i][j]); 122 ans = ans + dp(1, m, Big(2)); 123 } 124 print(ans); 125 return 0; 126 }
View Code
转载于:https://www.cnblogs.com/zhenghaotian/p/6898081.html
[luoguP1005] 矩阵取数游戏(DP + 高精度)相关推荐
- 【区间DP+高精】codevs1166 矩阵取数游戏题解
转自: [ametake版权所有]http://blog.csdn.net/ametake欢迎来看 http://blog.csdn.net/ametake/article/details/47664 ...
- 【日常学习】【区间DP+高精】codevs1166 矩阵取数游戏题解
题目来自NOIP2007TG3 如果在考场上我现在已经歇菜了吧 今天一整天的时间全部投在这道题上,收获不小. 先上题目 题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏 ...
- 【每日DP】day 10、P1005 矩阵取数游戏【区间DP+高精(python)】难度⭐⭐⭐★
P1005 矩阵取数游戏 输入 2 3 1 2 3 3 4 2 输出 82 说明/提示 NOIP 2007 提高第三题. 数据范围: 60%60\%60% 的数据满足:1≤n,m≤301\le n,m ...
- P1005 矩阵取数游戏(__int128模板/简单dp)
转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j 均为非负整数.游戏规则如下: 每次取数时 ...
- 洛谷P1005 矩阵取数游戏 ACM 大数+区间dp
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...
- 【每日一题】7月10日精讲—矩阵取数游戏
来源:牛客网: 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...
- NOIP2007 提高组【矩阵取数游戏】题解
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素a(i,j)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后取完矩阵内所有元素 ...
- 洛谷1005 【NOIP2007】矩阵取数游戏
问题描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 【codevs1166】【noip07TG】矩阵取数游戏,新的开始
1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [问题描述] 帅帅经 ...
最新文章
- linux zip 命令详解
- 李进良/丁守谦:希望TD-LTE成为4G的统一标准
- java温度计的实现_echart 之实现温度计
- 路径搜索 – Dijkstra 算法 (MATLAB实现)
- mysql awr 上海用户组_mysql awr v1.0.3修正说明以及发布
- ios开发学习-指示器(HUD)效果源码分享
- 分享6个关于自主学习的思维导图模板
- CreateThread函数,无法将参数 3 从“DWORD (__cdecl *)(LPVOID)”转换为“LPTHREAD_START_ROUTINE” PVZCheater
- Laravel学习记录--查询构造器
- 移动硬盘和电脑内置硬盘使用时的区别
- 蓝牙耳机怎么挑选?鹏鹏数码盘点2023口碑蓝牙耳机排行榜
- 暴雪battle注册账户不转到中国
- 无线蓝牙耳机哪种款式好用?口碑最好的蓝牙耳机推荐!
- 开放式式商业模式_开放式和封闭式耳机之间有什么区别,我应该得到什么?
- pytorch深度学习框架--gpu和cpu的选择
- 一起智慧课堂_聚焦课堂,提升质量——六盘水市钟山区第一小学“智慧”课堂校际交流活动...
- [Python人工智能] 十七.Keras搭建分类神经网络及MNIST数字图像案例分析
- 深度学习的下一个十年,延展基础科学研究变革的「角力场」
- 给新人程序员的 10 点建议
- 阿里腾讯还做不到,这30%的市场,雷军眼光更胜一筹!
热门文章
- 40+大厂AI面经,秋招offer手到擒来!
- 3D Vision公开课精华 | 深度三维感知:数据、学习架构与应用
- 在GIS中运用坐标系统
- 往map里的vector添加_面试官:同步容器(如Vector)的所有操作一定是线程安全的吗?...
- python卷积函数_python – 理解Scipy卷积
- r语言legend_R语言画热图时图例(legend)过多超出画图边界
- Navicat Premium 安装
- 华为鸿蒙系统学习笔记9-华为鸿蒙OS与LiteOS对比
- 静态资源详解和帮助文档的使用
- vue中router-link绑定click失效