luogu1005 矩阵取数游戏
题目大意
一个矩阵,每次从每一行的行首或行尾取一个数,每一行的价值为 取的数*2^当前取数的次数,每一次的价值为每一行的价值的和。求得到的价值的最大值。
思路

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAX_ROW = 100, MAX_COL = 100;
int A[MAX_ROW][MAX_COL];
int TotRow, TotCol; struct BigInt
{
private:
static const int MAX_N = 100, BASE = 10000, CARRY = 4;
int A[MAX_N];
int Len; public:
void Print()
{
printf("%d", A[Len]);
for (int i = Len - 1; i >= 0; i--)
printf("%0*d", CARRY, A[i]);
printf("\n");
} void Clear()
{
memset(A, 0, sizeof(A));
Len = 0;
} void Set(int x)
{
Clear();
while (x)
{
A[Len++] = x % BASE;
x /= BASE;
}
while (Len > 0 && A[Len] == 0)
Len--;
} BigInt(int x)
{
Set(x);
} BigInt()
{
Set(0);
} BigInt operator =(const BigInt& a)
{
memcpy(A, a.A, sizeof(A));
Len = a.Len;
return *this;
} BigInt operator *=(const BigInt& a)
{
BigInt b = *this;
Clear();
Len = a.Len + b.Len;
for (int i = 0; i <= a.Len; i++)
for (int j = 0; j <= b.Len; j++)
{
A[i + j] += a.A[i] * b.A[j];
A[i + j + 1] += A[i + j] / BASE;
A[i + j] %= BASE;
}
if (A[Len + 1])
Len++;
return *this;
} BigInt operator *(const BigInt& a)
{
BigInt ans = *this;
ans *= a;
return ans;
} BigInt operator +=(const BigInt& a)
{
Len = max(Len, a.Len);
for (int i = 0; i <= Len; i++)
{
A[i] += a.A[i];
A[i + 1] += A[i] / BASE;
A[i] %= BASE;
}
if (A[Len + 1])
Len++;
return *this;
} BigInt operator +(const BigInt& a)
{
BigInt ans = *this;
ans += a;
return ans;
} bool operator <(const BigInt& a) const
{
if (Len != a.Len)
return Len < a.Len;
for (int i = Len; i >= 0; i--)
if (A[i] != a.A[i])
return A[i] < a.A[i];
return true;
} bool Is0()
{
return Len == 0 && A[Len] == 0;
}
}F[MAX_COL][MAX_COL], Pow2[MAX_COL];
bool Vis[MAX_COL][MAX_COL]; void InitPow2(int n)
{
Pow2[0] = 1;
for (int i = 1; i <= n; i++)
Pow2[i] = Pow2[i - 1] * 2;
} BigInt Dfs(int row, int l, int r)
{
if (l > r)
return 0;
if (Vis[l][r])
return F[l][r];
Vis[l][r] = true;
BigInt a = Dfs(row, l + 1, r) + Pow2[TotCol - r + l] * A[row][l];
BigInt b = Dfs(row, l, r - 1) + Pow2[TotCol - r + l] * A[row][r];
return F[l][r] = a < b ? b : a;
} BigInt CalRow(int row)
{
memset(Vis, false, sizeof(Vis));
return Dfs(row, 1, TotCol);
} int main()
{
scanf("%d%d", &TotRow, &TotCol);
InitPow2(TotCol);
for (int i = 1; i <= TotRow; i++)
for (int j = 1; j <= TotCol; j++)
scanf("%d", &A[i][j]);
static BigInt ans(0);
for (int row = 1; row <= TotRow; row++)
ans += CalRow(row);
ans.Print();
return 0;
}
luogu1005 矩阵取数游戏的更多相关文章
- luogu1005矩阵取数游戏题解--区间DP
题目链接 https://www.luogu.org/problemnew/show/P1005 分析 忽然发现这篇题解好像并没有什么意义...因为跟奶牛零食那道题一模一样,博主比较懒如果您想看题解的 ...
- NOIP2007 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 1166 矩阵取数游戏[区间dp+高精度]
1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [ ...
- 矩阵取数游戏 NOIP 2007
2016-05-31 17:26:45 题目链接: NOIP 2007 矩阵取数游戏(Codevs) 题目大意: 给定一个矩阵,每次在每一行的行首或者行尾取一个数乘上2^次数,求取完最多获得的分数 解 ...
- 洛谷 P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- codevs1166 矩阵取数游戏
题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均 为非负整数.游戏规则如下: 1. 每次取数时须从每行各取走一个 ...
- 矩阵取数游戏洛谷p1005
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- P1005 矩阵取数游戏 区间dp 高精度
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...
- AC日记——矩阵取数游戏 洛谷 P1005
矩阵取数游戏 思路: dp+高精: 代码: #include <bits/stdc++.h> using namespace std; #define ll long long struc ...
随机推荐
- 使用Kettle增量抽取MongoDB数据实践
需求: 增量抽取MongoDB数据并加载到MSSQL 由于不能使用关系型数据库的自定义SQL, 所以主要遇到的问题有: 增量时间的查询和参数控制 ETL的批次信息和调用参数的写入 第一个问题的解决如下 ...
- 三角形状的点阵模糊效果iOS源码
源码FFAngularPointilism,FFAngularPointilism能够将UIImageView像添加滤波器一样生成三角形状的点阵模糊效果.可以通过动画方式来模糊,也可以立刻模糊.另外并 ...
- 【转载】HTTP 基础与变迁
原文地址:https://segmentfault.com/a/1190000006689489 HTTP HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于 ...
- (转)Java任务调度框架Quartz入门教程指南(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例
http://blog.csdn.net/zixiao217/article/details/53075009 Quartz的主要接口类是Schedule.Job.Trigger,而触发器Trigge ...
- HTML5轻松实现全屏视频背景
想在你的网页首页中全屏播放一段视频吗?而这段视频是作为网页的背景,不影响网页内容的正常浏览.那么我告诉你有一款Javascript库正合你意,它就是Bideo.js. 参考网址: https://ww ...
- selenium之浏览器驱动
selenium需要配合浏览器的驱动使用,几个主要的浏览器驱动如下 浏览器 链接 Chrome https://sites.google.com/a/chromium.org/chromedriver ...
- pandas.DataFrame.quantile
pandas.DataFrame.quantile 用于返回数据中的 处于1/5 1/2(中位数)等数据
- Django - 创建多对多及增加示例
创建多对多: 方式一: 自定义关系表 备注:自定义表Host.Application,通过自定义表,将表Host和Application进行关联(通过外键方式工): 执行语句:python manag ...
- Highcharts教程--把js代码从html中抽离出来,放到单独的一个js文件中。由html页面调用
1.html页面写法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 腾讯云,搭建python开发环境
准备工作 任务时间:5min ~ 10min Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.首先我们来看看系统中是否已经存在 Python ,并安装一些开发工具包: 安装前准备 ...