矩阵取数问题(dp,高精)
题目描述
帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n×mn \times mn×m的矩阵,矩阵中的每个元素ai,ja_{i,j}ai,j均为非负整数。游戏规则如下:
- 每次取数时须从每行各取走一个元素,共nnn个。经过mmm次后取完矩阵内所有元素;
- 每次取走的各个元素只能是该元素所在行的行首或行尾;
- 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值×2i\times 2^i×2i,其中iii表示第iii次取数(从111开始编号);
- 游戏结束总得分为mmm次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
输入输出格式
输入格式:
输入文件包括n+1n+1n+1行:
第111行为两个用空格隔开的整数nnn和mmm。
第2∽n+12\backsim n+12∽n+1行为n×mn \times mn×m矩阵,其中每行有mmm个用单个空格隔开的非负整数。
输出格式:
输出文件仅包含111行,为一个整数,即输入矩阵取数后的最大得分。
输入输出样例
说明
NOIP 2007 提高第三题
数据范围:
60%的数据满足:1≤n,m≤301\le n, m \le 301≤n,m≤30,答案不超过101610^{16}1016
100%的数据满足:1≤n,m≤801\le n, m \le 801≤n,m≤80,0≤ai,j≤10000 \le a_{i,j} \le 10000≤ai,j≤1000
分析:这道题主要是用来练习dp ,没有涉及高精的问题,因此代码是不能AC的,但是也学习了一下dp的思想,在洛谷上能够过六个点。。。
我们用dp[i][j]代表区间变为【i,j】时,获得的最大分数当区间变为[i][j]时,一定是由【i-1,j】或者是[i,j-1]这两个符合条件的方程式中转移过来的,在第m-(j-i)-1次i取走了当前值。。。
因此状态转移方程就是 dp[i][j]=max(dp[i-1][j]+a[t][i-1]*mypow(len),dp[i][j+1]+a[t][j+1]*mypow(len));
在这要注意一下,当区间长度为1时,它是没有办法把最后一个数字取出来的。因此在这里要在重新加上。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define ll unsigned long long
const int maxn = ;
ll mypow(int k){
ll sum=;
for(int i=; i<=k; i++ ){
sum*=;
}
return sum;
} int n,m;
ll ans=; int main(){
cin>>n>>m;
int a[maxn][maxn];
memset(a,,sizeof(a));
ll dp[maxn][maxn];
for( int i=; i<=n; i++ ){
for( int j=; j<=m; j++ ){
scanf("%d",&a[i][j]);
}
}
int t=; while(t++<n){
memset(dp,,sizeof(dp));
for( int i=; i<=m; i++ ){
for( int j=m; j>=i; j-- ){
int len =m-(j-i)-; }
}
// for( int i=1; i<=m; i++ ){
// for( int j=1; j<=m; j++ ){
// cout<<dp[i][j]<<" ";
// }
// cout<<endl;
// }
ll rev=;
int i;
for( i=; i<=m; i++ ){
ll r=dp[i][i]+a[t][i]*mypow(m);
if(r>rev) rev=r;
}
// cout<<"rev="<<rev<<endl;
ans+=rev;
}
cout<<ans<<endl;
return ;
}
矩阵取数问题(dp,高精)的更多相关文章
- [P1005][NOIP2007] 矩阵取数游戏 (DP+高精)
我不会高精…… 也不会DP…… 这道题即考高精又考DP…… 我要死了 给一个不是高精的代码(当然不能满分) #include<cstdio> #include<iostream> ...
- [LuoguP1005]矩阵取数游戏 (DP+高精度)
题面 传送门:https://www.luogu.org/problemnew/show/P1005 Solution 我们可以先考虑贪心 我们每一次都选左右两边尽可能小的数,方便大的放在后面 听起来 ...
- 1083 矩阵取数问题(DP)
1083 矩阵取数问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走 ...
- HDU 1176 免费馅饼 矩阵取数, dp + 滚动数组
http://acm.hdu.edu.cn/showproblem.php?pid=1176 首先可以处理出整张地图的状态. book[T][POS]表示第T秒,在第pos个地方有多少个馅饼. dp[ ...
- 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)
矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description [问题描述]帅帅经常跟 ...
- 1166 矩阵取数游戏[区间dp+高精度]
1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [ ...
- NOIP2007矩阵取数[DP|高精度]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 51Nod 1083 矩阵取数问题(矩阵取数dp,基础题)
1083 矩阵取数问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下 ...
- P1005 矩阵取数游戏 区间dp 高精度
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...
随机推荐
- C# Task ContinueWith的实现
看了上一篇C# Task 是什么?返回值如何实现? Wait如何实现 我们提到FinishContinuations方法中会调用TaskContinuation实例,那么我们的ContinueWith ...
- BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)
微软 BI ETL 架构设计 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改 ...
- ionic 状态栏显示异常 statusBar
从主分支上新建一个分支开发另一个app, 生成之后手机上显示状态栏异常, 如下图, 只显示了电池的色块, 百思不得其解啊. 各种猜测无果, 对比config.xml, 发现statusBar插件版本不 ...
- MFC通过button控制编辑框是否显示系统时间
在dlg.h中public bool flag; 在构造函数中 flag=false; 在button的生成函数中 if(flag) { flag=false; //m_showtime.SetWin ...
- Spring Boot用Cxf的jax-ws开发WebService
首先上项目的pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q ...
- TableView 无数据时展示占位视图
UITableView+NoDataView.m #import "UITableView+NoDataView.h" #import "NoDataView.h&quo ...
- MySQL优化器 --- index_merge
[背景] 对于关系数据库中的一张表,通常来说数据页面的总大小要比较某一个索引占用的页面要大的多(上面说的索引是不包涵主键索引的); 更进一步我们可以推导出,如果我们通过读索引就能解决问题,那么它相比读 ...
- 国外优秀C/C++网站
1.https://en.cppreference.com/w/ 2.https://www.geeksforgeeks.org/ 3.https://www.tutorialspoint.com/c ...
- ComputeShader中Counter类型的使用
接上一篇:https://www.cnblogs.com/hont/p/10122129.html 除了Append类型对应的Consume/AppendStructuredBuffer还有一个Cou ...
- spring事务的传播机制新解
以下是事物的传播机制: @Transactional(propagation=Propagation.REQUIRED)如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)@Transacti ...