传送门

和奶牛那个题很像,每一行状态互不影响,也就是求 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 + 高精度)相关推荐

  1. 【区间DP+高精】codevs1166 矩阵取数游戏题解

    转自: [ametake版权所有]http://blog.csdn.net/ametake欢迎来看 http://blog.csdn.net/ametake/article/details/47664 ...

  2. 【日常学习】【区间DP+高精】codevs1166 矩阵取数游戏题解

    题目来自NOIP2007TG3 如果在考场上我现在已经歇菜了吧 今天一整天的时间全部投在这道题上,收获不小. 先上题目 题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏 ...

  3. 【每日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 ...

  4. P1005 矩阵取数游戏(__int128模板/简单dp)

    转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j ​ 均为非负整数.游戏规则如下: 每次取数时 ...

  5. 洛谷P1005 矩阵取数游戏 ACM 大数+区间dp

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...

  6. 【每日一题】7月10日精讲—矩阵取数游戏

    来源:牛客网: 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  7. NOIP2007 提高组【矩阵取数游戏】题解

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素a(i,j)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后取完矩阵内所有元素 ...

  8. 洛谷1005 【NOIP2007】矩阵取数游戏

    问题描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  9. 【codevs1166】【noip07TG】矩阵取数游戏,新的开始

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [问题描述] 帅帅经 ...

最新文章

  1. linux zip 命令详解
  2. 李进良/丁守谦:希望TD-LTE成为4G的统一标准
  3. java温度计的实现_echart 之实现温度计
  4. 路径搜索 – Dijkstra 算法 (MATLAB实现)
  5. mysql awr 上海用户组_mysql awr v1.0.3修正说明以及发布
  6. ios开发学习-指示器(HUD)效果源码分享
  7. 分享6个关于自主学习的思维导图模板
  8. CreateThread函数,无法将参数 3 从“DWORD (__cdecl *)(LPVOID)”转换为“LPTHREAD_START_ROUTINE” PVZCheater
  9. Laravel学习记录--查询构造器
  10. 移动硬盘和电脑内置硬盘使用时的区别
  11. 蓝牙耳机怎么挑选?鹏鹏数码盘点2023口碑蓝牙耳机排行榜
  12. 暴雪battle注册账户不转到中国
  13. 无线蓝牙耳机哪种款式好用?口碑最好的蓝牙耳机推荐!
  14. 开放式式商业模式_开放式和封闭式耳机之间有什么区别,我应该得到什么?
  15. pytorch深度学习框架--gpu和cpu的选择
  16. 一起智慧课堂_聚焦课堂,提升质量——六盘水市钟山区第一小学“智慧”课堂校际交流活动...
  17. [Python人工智能] 十七.Keras搭建分类神经网络及MNIST数字图像案例分析
  18. 深度学习的下一个十年,延展基础科学研究变革的「角力场」
  19. 给新人程序员的 10 点建议
  20. 阿里腾讯还做不到,这30%的市场,雷军眼光更胜一筹!

热门文章

  1. 40+大厂AI面经,秋招offer手到擒来!
  2. 3D Vision公开课精华 | 深度三维感知:数据、学习架构与应用
  3. 在GIS中运用坐标系统
  4. 往map里的vector添加_面试官:同步容器(如Vector)的所有操作一定是线程安全的吗?...
  5. python卷积函数_python – 理解Scipy卷积
  6. r语言legend_R语言画热图时图例(legend)过多超出画图边界
  7. Navicat Premium 安装
  8. 华为鸿蒙系统学习笔记9-华为鸿蒙OS与LiteOS对比
  9. 静态资源详解和帮助文档的使用
  10. vue中router-link绑定click失效