矩阵取数游戏 NOIP 2007
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的更多相关文章
- 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)
矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description [问题描述]帅帅经常跟 ...
- 1166 矩阵取数游戏[区间dp+高精度]
1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [ ...
- 洛谷 P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 矩阵取数游戏洛谷p1005
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- P1005 矩阵取数游戏 区间dp 高精度
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...
- 洛谷P1005 矩阵取数游戏
P1005 矩阵取数游戏 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次 ...
- [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 洛谷1005 【NOIP2007】矩阵取数游戏
问题描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- NOIP2007 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
随机推荐
- FaceNet--Google的人脸识别(转)
引入 随着深度学习的出现,CV领域突破很多,甚至掀起了一股CV界的创业浪潮,当次风口浪尖之时,Google岂能缺席.特贡献出FaceNet再次刷新LFW上人脸验证的效果记录. 本文是阅读FaceNet ...
- spoj 1436
用并查集看一下是否会围成一个环 若围成环直接输出NO 当然 当 m >= n 时必然会围成环直接输出NO #include <algorithm> #include < ...
- uva 10608
简单并查集 水水..... #include <cstdio> #include <cstring> #define maxn 30005 int fa[maxn],ans[ ...
- 国外程序员整理的 C++ 资源大全
摘要:C++是在C语言的基础上开发的一种集面向对象编程.泛型编程和过程化编程于一体的编程语言.应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言. 关于 C++ 框架.库和资源的一 ...
- 批量扫描互联网无线路由设备telnet,并获取WIFI密码
批量扫描互联网无线路由设备telnet,并获取WIFI密码 http://lcx.cc/?i=4513
- Maven Source jar
http://blog.csdn.net/symgdwyh/article/details/4407945
- linux distribution是什么?
linux distribution,即Linux发行版,有很多种类,包括Fedora,Ubuntu,Debian,Red Hat,SuSE等,其内核都是差不多的,只是界面设计和功能上各有千秋.
- 为Windows 7添加“Internet打印”功能
http://wangchunhai.blog.51cto.com/225186/1156589/
- 【HDOJ】4652 Dice
1. 题目描述对于m面的骰子.有两种查询,查询0表示求最后n次摇骰子点数相同的期望:查询1表示最后n次摇骰子点数均不相同的期望. 2. 基本思路由期望DP推导,求得最终表达式.(1) 查询0 不 ...
- 如何将一个Form中的代码拆分到多个文件中
https://social.msdn.microsoft.com/Forums/en-US/64c77755-b0c1-4447-8ac9-b5a63a681b78/partial-class-fo ...