【Luogu】P1005矩阵取数游戏(高精度+DP)
yeah终于过辣!
DP,f[i][j]表示每行还剩i到j这个区间的数没取的时候的值。借这个题我也把高精度的短板弥补了一下,以后高精加高精乘应该是没问题了。
哇终于不怂高精了……
放上代码。
#include<cstdio>
#include<cctype>
#include<iostream>
#include<cstring> inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct BigInteger{
int s[],len;
BigInteger(){ len=; memset(s,,sizeof(s)); } bool operator >(BigInteger a){
if(len!=a.len) return len>a.len;
for(int i=len;i;--i){
if(s[i]!=a.s[i]) return s[i]>a.s[i];
}
return ;
} bool operator ==(BigInteger a){
if(len!=a.len) return ;
for(int i=;i<=len;++i)
if(s[i]!=a.s[i]) return ;
return ;
} bool operator <(BigInteger a){
return (!(*this>a)&&!(*this==a));
} BigInteger operator =(char* d){
int size=strlen(d+);
(*this).len=size;
for(int i=size,tot=;tot<size;--i) (*this).s[++tot]=d[i]-'';
return *this;
} BigInteger operator =(int num){
char d[];
sprintf(d+,"%d",num);
*this=d;
return *this;
} inline void out(){
for(register int i=len;i;--i) printf("%d",s[i]);
} BigInteger operator +(BigInteger a){
BigInteger ans;
ans.len=;
int size=std::max(len,a.len);
for(int i=,g=;g||i<=size;++i){
int now=s[i]+a.s[i]+g;
ans.s[++ans.len]=now%;
g=now/;
}
return ans;
} BigInteger in(){
char d[];
scanf("%s",d+);
*this=d;
return *this;
} BigInteger operator *(BigInteger a){
BigInteger ans;
ans.len=;
int size=len+a.len;
for(int i=;i<=len;++i)
for(register int j=;j<=a.len;++j)
ans.s[i+j-]+=s[i]*a.s[j];
for(int i=;i<size;++i){
ans.s[i+]+=ans.s[i]/;
ans.s[i]%=;
}
while(size>&&!ans.s[size]) size--;
ans.len=size;
return ans;
} }; BigInteger Pow(BigInteger a,int b){
if(b==) return a;
BigInteger ret;
ret=;
while(b){
if(b&) ret=ret*a;
a=a*a;
b>>=;
}
return ret;
} BigInteger f[][];
BigInteger d[][];
BigInteger ans;
BigInteger two;
int main(){
two=;ans=;
int n=read(),m=read();
for(int i=;i<=n;++i)
for(int j=;j<=m;++j) d[i][j]=read();
for(int T=;T<=n;++T){
memset(f,,sizeof(f));
for(int len=m;len;--len){
BigInteger Powval;Powval=Pow(two,m-len);
for(int i=;i+len-<=m;++i){
int j=i+len-;
if(j<m&&f[i][j+]+Powval*d[T][j+]>f[i][j]) f[i][j]=f[i][j+]+Powval*d[T][j+];
if(i>&&f[i-][j]+Powval*d[T][i-]>f[i][j]) f[i][j]=f[i-][j]+Powval*d[T][i-];
}
}
BigInteger Max;Max=;
BigInteger Powval=Pow(two,m);
for(int i=;i<=m;++i)
if(Max<f[i][i]+Powval*d[T][i]) Max=f[i][i]+Powval*d[T][i];
ans=ans+Max;
}
ans.out();
return ;
}
【Luogu】P1005矩阵取数游戏(高精度+DP)的更多相关文章
- P1005 矩阵取数游戏 区间dp 高精度
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...
- P1005 矩阵取数游戏[区间dp]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...
- 洛谷P1005 矩阵取数游戏
P1005 矩阵取数游戏 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次 ...
- 1166 矩阵取数游戏[区间dp+高精度]
1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [ ...
- TYVJ 矩阵取数 Label:高精度+dp
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 洛谷 P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 洛谷 P1005 矩阵取数游戏 (区间dp+高精度)
这道题大部分时间都在弄高精度-- 还是先讲讲dp吧 这道题是一个区间dp,不过我还是第一次遇到这种类型的区间dp f[i][j]表示取了数之后剩下i到j这个区间的最优值 注意这里是取了i之前和j之后的 ...
- P1005 矩阵取数游戏(动态规划+高精度)
题目链接:传送门 题目大意: 给定长度为m的数列aj,每次从两端取一个数,得到2k * aj的价值(k为当前的次数,从1开始到m),总共有n行这样的数列,求最大价值总和. 1 ≤ n, m ≤ 80, ...
随机推荐
- be seen doing和be seen to do的区别
1. be seen doing和be seen to do的区别 be seen doing表被看到正在做某事:be seen to do 表被看到做某事(不表进行) He was seen to ...
- 【extjs6学习笔记】0.3 准备:系统架构
- springmvc+maven搭建web项目
1.创建一个maven project 为spring1 2.进行项目的配置:默认的java 1.5 在properties中选择project facts项目进行配置,反选web之后修改java环境 ...
- fluent_python1
Magic Method python中有些跟对象本身有关的方法, 以两个下划线开始,两个下划线结束, 一般称为魔法方法(magic method). 比如 obj[key] 的背后就是 __geti ...
- App Store上的开源应用汇总
以下是互联网上主要的开源iOS应用的列表,在学习的时候,多看看完成的功能代码可以给我们带来很多经验,但是除了Apple官方提供的Sample Code之外,我们很难找到优质的开源项目代码,所以我搜集了 ...
- haproxy文件的增删改查
在构建一个程序项目之前,首先需要设计程序的框架,从总体上构建一个项目中的一个个功能,之后对每一个功能进行补充,最终实现总体的功能. 1 程序的总体框架: 首先把所有的功能设计成相应的函数,用pass来 ...
- ArcMap所有Command GUID
The information in this topic is useful if you're trying to programmatically find a built-in command ...
- 响应式web设计视图工具及插件总结----20150113
响应式web设计可以说火不火是迟早的,下面就对于最开始的视口调试的方法汇总,希望有好的方法大家一起交流. 1.火狐:从Firefox升级到29.0之后就不直接支持Firesizer了. 先安装Add- ...
- PAT 乙级 1019
题目 题目地址:PAT 乙级 1019 思路 本题没有考虑到小于1000的情况,当小于1000的时需要给vector的向量中推入0,直到向量中有四位数字,之后再进行排序并进行相关计算 代码 #incl ...
- linux中复制文件夹的所有文件到指定目录
这里我们的需求是需要将一个文件夹中的所有文件都复制到另一个文件夹中,而不是将一个文件夹复制到另外一个文件夹中. //这里需要使用到-R参数,表示递归处理,将指定目录下的所有文件与子目录一并处理//一开 ...