NOIP2007 矩阵取数游戏
题目描述
帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数。游戏规则如下:
1.每次取数时须从每行各取走一个元素,共n个。m次后取完矩阵所有元素;
2.每次取走的各个元素只能是该元素所在行的行首或行尾;
3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号);
4.游戏结束总得分为m次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
输入输出格式
输入格式:
输入文件game.in包括n+1行:
第1行为两个用空格隔开的整数n和m。
第2~n+1行为n*m矩阵,其中每行有m个用单个空格隔开的非负整数。
数据范围:
60%的数据满足:1<=n, m<=30,答案不超过10^16
100%的数据满足:1<=n, m<=80,0<=aij<=1000
输出格式:
输出文件game.out仅包含1行,为一个整数,即输入矩阵取数后的最大得分。
这是世界上最丑的高精...然而并不能阻止我AC...
#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
#define M(x) memset(x,0,sizeof(x))
using namespace std;
void ADD(int a[],int b[],int c[]){
],b[]);
;i<=len;i++){
c[i]+=a[i]+b[i];
){
c[i+]+=c[i]/;
c[i]%=;
}
}
]) c[]=len+;
]=len;
}
bool BIGGER(int a[],int b[]){
]==b[]){
];i>=;i--) if(a[i]!=b[i]) return a[i]>b[i];
}]>b[];
}
void C(int a[],int b[],int c[]){
;i<=a[];i++){
;j<=b[];j++){
c[i+j-]+=a[i]*b[j];
}
}
c[]=a[]+b[]+;
;i<=c[];i++){
c[i+]+=c[i]/;
c[i]%=;
}
]]&&c[]>) c[]--;
return;
}
void change(int a,int b[]){
){
b[++b[]]=a%;
a/=;
}b[++b[]]=a;
}
void print(int a[]){
];i>=;i--) printf("%d",a[i]);
}
],v[][],mem[][][],ppow[][];
void dp(int l,int r,int c[]){
if(v[l][r]){
;i<=mem[l][r][];i++) c[i]=mem[l][r][i];
return;
}
v[l][r]=;
memset(mem[l][r],,sizeof(mem[l][r]));
if(l==r){
];M(t);
change(data[l],mem[l][r]);
C(mem[l][r],ppow[m],t);
;i<=t[];i++) mem[l][r][i]=c[i]=t[i];
return;
}
],t3[],t4[],ll[],rr[];
M(t2);dp(l+,r,t2);
M(t3);change(data[l],t3);
M(t4);C(t3,ppow[m-r+l],t4);
M(ll);ADD(t2,t4,ll);
M(t2);dp(l,r-,t2);
M(t3);change(data[r],t3);
M(t4);C(t3,ppow[m-r+l],t4);
M(rr);ADD(t2,t4,rr);
if(BIGGER(ll,rr)){
;i<=ll[];i++) c[i]=mem[l][r][i]=ll[i];
};i<=rr[];i++) c[i]=mem[l][r][i]=rr[i];
return;
}
void calcppow(){
M(ppow);
ppow[][]=;ppow[][]=;
];two[]=;two[]=;
;i<=;i++) C(ppow[i-],two,ppow[i]);
}
int main()
{
calcppow();
],t[],t2[];memset(ans,,sizeof(ans));
scanf("%d%d",&n,&m);
;i<=n;i++){
;j<=m;j++){
scanf("%d",&data[j]);
}
memset(t,,sizeof(t));
memset(v,,sizeof(v));
M(mem);
dp(,m,t);
M(t2);ADD(ans,t,t2);
;i<=t2[];i++) ans[i]=t2[i];
}
print(ans);
;
}
NOIP2007 矩阵取数游戏的更多相关文章
- NOIP2007 矩阵取数游戏(区间DP)
传送门 这道题第一眼看上去可能让人以为是贪心……不过贪心并不行,因为每次的操作是有2的幂次方的权值的.这样的话直接每次贪心最小的就目光短浅.所以那我们自然想到了DP. 据说这是一道很正常的区间DP? ...
- [P1005][NOIP2007] 矩阵取数游戏 (DP+高精)
我不会高精…… 也不会DP…… 这道题即考高精又考DP…… 我要死了 给一个不是高精的代码(当然不能满分) #include<cstdio> #include<iostream> ...
- [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 洛谷1005 【NOIP2007】矩阵取数游戏
问题描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 矩阵取数游戏 NOIP 2007
2016-05-31 17:26:45 题目链接: NOIP 2007 矩阵取数游戏(Codevs) 题目大意: 给定一个矩阵,每次在每一行的行首或者行尾取一个数乘上2^次数,求取完最多获得的分数 解 ...
- NOIP2007矩阵取数[DP|高精度]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 1166 矩阵取数游戏[区间dp+高精度]
1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [ ...
- 洛谷 P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- codevs1166 矩阵取数游戏
题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均 为非负整数.游戏规则如下: 1. 每次取数时须从每行各取走一个 ...
随机推荐
- php面试题及答案
1.用PHP打印出前一天的时间,格式是2006-5-10 22:21:21 <?php //echo date('Y-m-d H:i:s',time()-60*60*24 echo da ...
- VC++常用函数
// 获取文件运行路径 void GetAppFilePath(const CString& strProjectName) { TCHAR szFileName[MAX_PATH]; HMO ...
- redis之(二十一)redis之深入理解Spring Redis的使用
关于spring redis框架的使用,网上的例子很多很多.但是在自己最近一段时间的使用中,发现这些教程都是入门教程,包括很多的使用方法,与spring redis丰富的api大相径庭,真是浪费了这么 ...
- JSBinding+Bridge.NET限制
限制: 框架代码不可以访问逻辑代码.这是最基本的. 框架里的函数 f 带数组参数时,逻辑代码调用 f 的话,数组只能做为输入,也就是说,如果在框架函数 f 里修改了数组的内容,那么逻辑代码是无法取得新 ...
- python对象
一: 基本概念 在pyhton中一切皆对象,就像类unix中的一切皆文件一样,恩,一切.把事物当作对象进行处理, 这样自然就成了面向对象的编程了. 所有的 Python 对像都拥有三个特性:身份,类型 ...
- VS中Debug和Realease、及静态库和动态库的区别整理(转)
原文出自:http://www.cnblogs.com/chensu/p/5632486.html 一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不 ...
- 分析案例:应用服务器W3WP进程CPU持续超过百分之九十(Oracle客户端Bug)
问题描述: 项目反馈应用负载的其中一台服务器业务操作的响应非常慢,登录该服务器发现W3WP进程CPU持续超过90%,哪怕在业务低峰期也是如此?远程查看后发现该应用服务器承载的请求确实很低,why??? ...
- 性能测试知多少---系统架构分析 转自https://yq.aliyun.com/articles/35147?spm=5176.100239.blogcont24251.8.lS96At
摘要: 有些事儿一旦放一放就难再拾起来,突然发现<性能测试知多少>这个系列两月没更新,关键时我都不知道啥时候放下的,总容易被各种技术所吸引走,如饥似渴的想学更多的东西,这几天一直有朋友问我 ...
- 使用jQuery+PHP+Mysql实现抽奖程序
抽奖程序在实际生活中广泛运用,由于应用场景不同抽奖的方式也是多种多样的.本文将采用实例讲解如何利用jQuery+PHP+Mysql实现类似电视中常见的一个简单的抽奖程序. 查看演示 本例中的抽奖程序要 ...
- 11、java中的模板方法设计模式
/* 需求:获取一段程序运行的时间. 原理:获取程序开始和结束的时间并相减即可. 获取时间:System.currentTimeMillis(); 当代码完成优化后,就可以解决这类问题. 这种方式,模 ...