描述


http://codevs.cn/problem/1166/

分析


 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=; struct Bign{
int x[maxn],cnt;
int & operator [] (int id){ return x[id]; }
Bign(){ memset(x,,sizeof x); }//空的构造函数
Bign(int num){ *this=num; }//赋一个数字的构造函数
Bign(char* num){ *this=num; }//赋一个字符串数字的构造函数
Bign operator = (const char* num){//字符串的赋值函数
memset(x,,sizeof x); cnt=strlen(num);
for(int i=;i<=cnt;i++) x[i]=num[cnt-i-]-'';
return *this;
}
Bign operator = (int num){//数字的赋值函数
memset(x,,sizeof x); cnt=;
while(num){
x[++cnt]=num%;
num/=;
}
return *this;
}
Bign operator + (Bign y) const{//加法
Bign z; z.cnt=max(cnt,y.cnt);
for(int i=;i<=z.cnt;i++){
z[i]+=x[i]+y[i];
if(z[i]>=) z[i+]++, z[i]-=;
}
if(z[z.cnt+]) z.cnt++;//加法至多多出一位
return z;
}
Bign operator - (Bign y) const{//减法
Bign z; z.cnt=cnt;
for(int i=;i<=z.cnt;i++){
z[i]+=x[i]-y[i];
if(z[i]<) z[i+]--, z[i]+=;
}
while(z.cnt&&!z[z.cnt]) z.cnt--;//减法可能会少很多位
return z;
}
Bign operator * (Bign y) const{//乘法
Bign z;
for(int i=;i<=cnt;i++)
for(int j=;j<=y.cnt;j++)
z[i+j-]+=x[i]*y[j],z[i+j]+=z[i+j-]/, z[i+j-]%=;
z.cnt=cnt+y.cnt;//乘法后结果的位数为cnt1+cnt2或cnt1+cnt2-1.
if(!z[z.cnt]) z.cnt--;
return z;
}
Bign operator / (Bign y) const{//除法
Bign z=*this,d=;
for(int i=cnt;i;i--){
d=d*+x[i];
for(int j=;j<;j++)
if(d<y*(j+)){
z[i]=j;
d=d-y*j;
break;
}
}
while(z.cnt&&!z[z.cnt]) z.cnt--;
return z;
}
Bign operator % (Bign y) const{//取模
Bign d=;
for(int i=cnt;i;i--){
d=d*+x[i];
for(int j=;j<;j++)
if(d<y*(j+)){
d=d-y*j;
break;
}
}
return d;
}
Bign &operator += (Bign y){ *this=*this+y; return *this; }
Bign &operator -= (Bign y){ *this=*this-y; return *this; }
Bign &operator *= (Bign y){ *this=*this*y; return *this; }
Bign &operator /= (Bign y){ *this=*this/y; return *this; }
Bign &operator %= (Bign y){ *this=*this%y; return *this; } bool operator < (Bign y){
if(cnt!=y.cnt) return cnt<y.cnt;
for(int i=cnt;i;i--)
if(x[i]!=y[i]) return x[i]<y[i];
return false;
}
bool operator > (Bign y){ return y<*this; }
bool operator <= (Bign y){ return!(y<*this); }
bool operator >= (Bign y){ return!(*this<y); }
bool operator != (Bign y){ return y<*this||*this<y; }
bool operator == (Bign y){ return!(y<*this)&&!(*this<y); }
}dp[][],a[][],ans;
istream& operator >> (istream &in,Bign &x){//输入
char s[maxn];
scanf("%s",s+); int len=strlen(s+);
for(int i=len;i;i--)
x[len+-i]=s[i]-'';
x.cnt=len;
return in;
}
ostream& operator << (ostream &out,Bign &x){//输出
for(int i=x.cnt;i;i--)
out << x[i];
if(!x.cnt) out << ;
return out;
} int main(){
int n,m;
scanf("%d%d",&n,&m);
Bign t=;
for(int i=;i<=m;i++) t*=;
for(int i=;i<=n;i++){
memset(dp,,sizeof dp);
for(int j=;j<=m;j++){
cin >> a[i][j];
dp[j][j]=t*a[i][j];
}
Bign tmp=t;
for(int k=;k<=m;k++){
tmp/=;
for(int l=;l<=m-k+;l++){
int r=l+k-;
if(dp[l+][r]+a[i][l]*tmp>dp[l][r-]+a[i][r]*tmp)
dp[l][r]=dp[l+][r]+a[i][l]*tmp;
else
dp[l][r]=dp[l][r-]+a[i][r]*tmp;
}
}
ans+=dp[][m];
}
cout << ans <<endl;
return ;
}

Codevs_1166_[NOIP2007]_矩阵取数游戏_(动态规划+高精度)的更多相关文章

  1. P1005 矩阵取数游戏(动态规划+高精度)

    题目链接:传送门 题目大意: 给定长度为m的数列aj,每次从两端取一个数,得到2k * aj的价值(k为当前的次数,从1开始到m),总共有n行这样的数列,求最大价值总和. 1 ≤ n, m ≤ 80, ...

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

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

  3. 1166 矩阵取数游戏[区间dp+高精度]

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

  4. P1005 矩阵取数游戏 区间dp 高精度

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

  5. [luoguP1005] 矩阵取数游戏(DP + 高精度)

    传送门 和奶牛那个题很像,每一行状态互不影响,也就是求 n 遍DP 不过高精度非常恶心,第一次写,调了我一上午. ——代码 #include <cstdio> #include <c ...

  6. NOIP2007 矩阵取数游戏

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

  7. [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏

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

  8. 矩阵取数游戏 NOIP 2007

    2016-05-31 17:26:45 题目链接: NOIP 2007 矩阵取数游戏(Codevs) 题目大意: 给定一个矩阵,每次在每一行的行首或者行尾取一个数乘上2^次数,求取完最多获得的分数 解 ...

  9. 【NOIP2007】矩阵取数

    因为傻逼写错高精度搞了一下午浪费好多时间,好想哭qaq 原题: 帅帅经常更同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij据为非负整数.游戏规则如下: 1. 每次取数时须从每 ...

随机推荐

  1. Html5 js FileReader接口

    用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据.到目前文职,只有FF3.6+和Chrome6 ...

  2. SQL Constraint/Index

    1.SQL Constraint Integrity Constraints are used to apply business rules for the database tables. The ...

  3. Java中的面向对象

    Java中的面向对象 在软件开发的学习中, 我最先接触的开发语言就是java,但都是简单的函数和循环数组的应用.说道面向对象,第一次看到这个词的时候还是在C#的学习过程中,我记得当时PPT上霸气的解释 ...

  4. 【JSP&Servlet学习笔记】5.Servlet进阶AIP、过滤器与监听器

    Servlet接口上,与生命周期及请求服务相关的三个方法是init().service()与destory()方法.当Web容器加载Servlet类并实例化之后,会生成ServletConfig对象并 ...

  5. Asp.Net细节性问题精萃

    1.<%=…%>与<%#… %>的区别: 答:<%=…%>是在程序执行时调用,<%#… %>是在DataBind()方法之后被调用 2.控件接收哪些类型 ...

  6. jsonp使用规范

    这两天花了很多时间弄研究jsonp这个东西, 可是无论我怎么弄..TMD就是不进入success函数,并且一直进入error函数...让我着实DT啊. 可以看下我之间的提问(这就是我遇到的烦恼).. ...

  7. 关于aspx模板页面元素路径的问题,以及对模板页面的理解

    模板页面仅是模板,它不是单独存在的页面,它的路径就是引用它的内容页面的路径. 换句话说,模板页面,只是内容页面上固定的部分.     模板页面引用了的js和CSS,内容页面就不用重新引用了   css ...

  8. DB天气app冲刺第八天

    ---恢复内容开始--- 今天已经是第八天了冲刺,本来今天的ui设计已经基本成型了,今天下午设计什么的都弄好了,然后自己手贱clean了一下,可能是自己的程序的bug吧,调试没有错误,安装在模拟器上以 ...

  9. 常用javascript代码片段集锦

    常用方法的封装 根据类名获取DOM元素 var $$ = function (className, element) { if (document.getElementsByClassName) { ...

  10. 记一次Oracle数据库迁移部署

    --20141230部署脚本(按照时间顺序从上往下) --命令行,导出要部署的数据库数据(无分号) --expdp RMB3/test123@orcl3 SCHEMAS=RMB3 directory= ...