2016-05-31 17:26:45

题目链接: NOIP 2007 矩阵取数游戏(Codevs)

题目大意:

  给定一个矩阵,每次在每一行的行首或者行尾取一个数乘上2^次数,求取完最多获得的分数

解法:

  动态规划

  DP[i][j]表示当前行i位置到j位置获得的最大分数

  转移方程:

    DP[i][j]=max(DP[i+1][j]+a[i]*2^x,DP[i][j-1]+a[i]*2^x);

需要注意的地方:

  1.M和N给的范围略坑啊,2^80只有悄悄不说话了,所以直接上了100000的压位,感觉比高精好使多了

  2.2的次方多次用到,所以预先处理出来待用

 //矩阵取数游戏 (NOIP2007)
//动态规划 高精度
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=;
const int maxm=;
const int maxl=;
int N,M;
int a[maxn];
int DP[maxn][maxm][maxl];
int ys[maxn][maxl];
int ans[maxl];
int tmp[maxl];
void Multi(int *x,int *y,int z)
{
memset(tmp,,sizeof(tmp));
tmp[]=y[];
for(int i=;i<=tmp[];i++)
{
tmp[i]=y[i]*z;
}
for(int i=;i<=tmp[];i++)
{
tmp[i+]+=tmp[i]/;
tmp[i]%=;
}
while(tmp[tmp[]+])
{
tmp[]++;
tmp[tmp[]+]+=tmp[tmp[]]/;
tmp[tmp[]]%=;
}
for(int i=;i<;i++)x[i]=tmp[i];
return ;
}
void Add(int *x,int *y,int *z)
{
memset(tmp,,sizeof(tmp));
if(y[]>z[])tmp[]=y[];
else tmp[]=z[];
for(int i=;i<=tmp[];i++)
{
tmp[i]=y[i]+z[i];
}
for(int i=;i<=tmp[];i++)
{
tmp[i+]+=tmp[i]/;
tmp[i]%=;
}
if(tmp[tmp[]+])tmp[]++;
for(int i=;i<;i++)x[i]=tmp[i];
return ;
}
bool Max(int *x,int *y)
{
if(x[]>y[])return ;
else if(y[]>x[])return ;
else
{
for(int i=x[];i>=;i--)
{
if(x[i]>y[i])return ;
else if(x[i]<y[i])return ;
}
}
return ;
}
int main()
{
scanf("%d %d",&N,&M);
ys[][]=;
ys[][]=;
for(int i=;i<=M;i++)
{
Multi(ys[i],ys[i-],);
}
ans[]=;ans[]=;
for(int i=;i<=N;i++)
{
for(int j=;j<=M;j++)
{
scanf("%d",&a[j]);
Multi(DP[j][j],ys[M],a[j]);
}
for(int k=;k<=M;k++)
{
for(int x=;x<=M-k+;x++)
{
int y=x+k-;
int xm[],ym[],cm[];
Multi(cm,ys[M-k+],a[x]);
Add(xm,cm,DP[x+][y]);
Multi(cm,ys[M-k+],a[y]);
Add(ym,cm,DP[x][y-]);
if(Max(xm,ym))
{
memcpy(DP[x][y],xm,sizeof(int)*);
}
else
{
memcpy(DP[x][y],ym,sizeof(int)*);
}
}
}
Add(ans,ans,DP[][M]);
}
printf("%d",ans[ans[]]);
for(int i=ans[]-;i>=;i--)
{
printf("%05d",ans[i]);
}
printf("\n");
return ;
}

矩阵取数游戏 NOIP 2007的更多相关文章

  1. 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)

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

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

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

  3. 洛谷 P1005 矩阵取数游戏

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

  4. 矩阵取数游戏洛谷p1005

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

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

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

  6. 洛谷P1005 矩阵取数游戏

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

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

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

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

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

  9. NOIP2007 矩阵取数游戏

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

随机推荐

  1. uva 11069

    一开始打了个表  发现 a[i] = a[i-3]+a[i-2]; #include <iostream> #include <fstream> #include <cs ...

  2. Spark 1.60的executor schedule

    第一次看源码还是Spark 1.02.这次看新源码发现调度方式有了一些新的特征,在这里随便写一下. 不变的是,master还是接收Appclient和worker的消息,并且在接收RegisterAp ...

  3. Python/Ruby/Go/Node 之四国大战

    Python Flask vs Ruby Sinatra vs Go Martini vs Node Express 本文授权转载自 zybuluo 博客. 题外话一: 最近一段时间,Cloud In ...

  4. C++转换unicode utf-8 gb2312编码

    windows开发环境下用VC++6.0 对unicode .utf-8. gb2312 三种编码格式之间的转换方法: #include <iostream> #include <s ...

  5. IntelliJ Idea12 破解码与中文乱码配置

    user name:JavaDeveloper serial number:92547-KY2BB-QZ0S1-PEZCV-HUT8Q-6RYY4        会出现Ok可以点击就会将软件 安装后, ...

  6. 【无聊放个模板系列】POJ 3678 2-SAT

    #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...

  7. http://jingyan.baidu.com/article/7908e85c74d85faf491ad260.html

    http://jingyan.baidu.com/article/7908e85c74d85faf491ad260.html

  8. ENVI Services Engine5.1 应用开发入门教程

    原文地址: ENVI Services Engine5.1 应用开发入门教程_ENVI-IDL中国_新浪博客 http://blog.sina.com.cn/s/blog_764b1e9d0102uy ...

  9. 在vs2010中mfc,C++的一些小经验

    1 如果你最近才从vc6.0到vs2010,在vs2010中mfc可能遇见一个小问题,如果你添加或改天了窗口中的控件,运行程序缺没有发现其中的变化,这时候需要在debug选项中rebuild all一 ...

  10. DSPLIB for C6455+CCSv3.3

    问题描述: Hello everybody, I was looking for DSPLIB libraries optimized for C6455 processors. I found th ...