@kaike

传送门

07年noipT3?

要我写我肯定放弃 嗯没错就是这么果断

据说要 高精 DP 状态?

举例说明,假设有矩阵

a1,a2,a3,a4....an

b1,b2,b3,b4....bn

假设矩阵的最大得分取法为

a1*2+b1*2+a2*4+b2*4+a3*8+b3*8+.....+an*2^n+b2*2^n;

可以转换为

a1*2+a2*4+a3*8+...+an*2^n  +  b1*2+b2*4+b3*8+....+bn*2^n;

上面的式子其实也就是a1那一行的最大得分加上b1那一行的最大得分

也就是说 矩阵的最大得分其实是每一行的最大得分之和

每一行的取数不会和其他行发生冲突或联系

于是矩阵取数最大得分就转化为 每一行的最大得分之和

求出每一行的最大得分,求和就可以得到矩阵的最大得分

对于每一行都有两种选择,行头和行尾

设f[i][j]表示取i个数,其中j个数为行头,x表示第几行

f[i][j]=max{f[i-1][j-1]+a[x][j]*cifang[i], f[i-1][j]+a[x][m-(i-j)+1]*cifang[i]};

 1 //第i循环为取第几次数,乘i次方
 2 //第j循环为有几个数是当行头来取得
 3 //易知可取行头和行尾
 4 //第一个式子为取行头,取i-1个数以及j-1为行头+这一个数为行头
 5 //第二个式子为取行尾,取i-1个数以及j为行头,m-(i-j)+1为行尾
 6
 7 //设第一行为1,2,3,4,5,6,易知m=6,x=1;
 8 //当要取4个数时,i=4,假设前2个数为行头,j=2,这时要取第5个数,5;
 9 // i-1-j 为取得数中行尾的个数  由 m-(i-1-j)可求出要取数的坐标
10 //也就是 m-(i-j)+1 ;
11 void work(int x)
12 {
13     for(int i=1;i<=m;i++)
14         for(int j=0;j<=i;j++)
15         {
16             f[i][j]=max(f[i][j],f[i-1][j-1]+a[x][j]*ci[i]);
17             f[i][j]=max(f[i][j],f[i-1][j]+a[x][m-(i-j)+1]*ci[i]);
18         }
19 }

先来一把不是高精的只能得暴力分60的code

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 int n,m,a[100][100];
 6 long long f[100][100],ci[100],ans=0,maxx=-10000;
 7 void init()
 8 {
 9     cin>>n>>m;
10     for(int i=1;i<=n;i++)
11         for(int j=1;j<=m;j++)
12             cin>>a[i][j];
13 }
14 void cifang()
15 {
16     ci[0]=1;
17     for(int i=1;i<=m;i++)
18         ci[i]=ci[i-1]*2;
19 }//预留次方
20
21 //第i循环为取第几次数,乘i次方
22 //第j循环为有几个数是当行头来取得
23 //易知可取行头和行尾
24 //第一个式子为取行头,取i-1个数以及j-1为行头+这一个数为行头
25 //第二个式子为取行尾,取i-1个数以及j为行头,m-(i-j)+1为行尾
26
27 //设第一行为1,2,3,4,5,6,易知m=6,x=1;
28 //当要取4个数时,i=4,假设前2个数为行头,j=2,这时要取第5个数,5;
29 // i-1-j 为取得数中行尾的个数  由 m-(i-1-j)可求出要取数的坐标
30 //也就是 m-(i-j)+1 ;
31 void work(int x)
32 {
33     for(int i=1;i<=m;i++)
34         for(int j=0;j<=i;j++)
35         {
36             f[i][j]=max(f[i][j],f[i-1][j-1]+a[x][j]*ci[i]);
37             f[i][j]=max(f[i][j],f[i-1][j]+a[x][m-(i-j)+1]*ci[i]);
38         }
39 }
40 int main()
41 {
42     init();
43     cifang();
44     for(int i=1;i<=n;i++)
45     {
46         memset(f,0,sizeof(f));
47         maxx=-10000;
48         work(i);
49         for(int j=1;j<=m;j++)
50             maxx=max(maxx,f[m][j]);
51         ans+=maxx;
52     }
53     cout<<ans<<endl;
54     return 0;
55 }

蠢哭了

转载于:https://www.cnblogs.com/Kaike/p/5996389.html

[JZOJ P1288] [DP]矩阵取数相关推荐

  1. 【每日DP】day 10、P1005 矩阵取数游戏【区间DP+高精(python)】难度⭐⭐⭐★

    P1005 矩阵取数游戏 输入 2 3 1 2 3 3 4 2 输出 82 说明/提示 NOIP 2007 提高第三题. 数据范围: 60%60\%60% 的数据满足:1≤n,m≤301\le n,m ...

  2. P1005 矩阵取数游戏(__int128模板/简单dp)

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

  3. 51Nod-1083 矩阵取数问题【DP】

    1083 矩阵取数问题 基准时间限制:1秒 空间限制:131072KB 分值:5难度:1级算法题 一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走, ...

  4. 洛谷P1005 矩阵取数游戏 ACM 大数+区间dp

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

  5. 【区间DP+高精】codevs1166 矩阵取数游戏题解

    转自: [ametake版权所有]http://blog.csdn.net/ametake欢迎来看 http://blog.csdn.net/ametake/article/details/47664 ...

  6. 【日常学习】【区间DP+高精】codevs1166 矩阵取数游戏题解

    题目来自NOIP2007TG3 如果在考场上我现在已经歇菜了吧 今天一整天的时间全部投在这道题上,收获不小. 先上题目 题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏 ...

  7. TYVJ 矩阵取数 Label:高精度+dp

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

  8. 【每日一题】7月10日精讲—矩阵取数游戏

    来源:牛客网: 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

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

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

最新文章

  1. BIG DATA 大数据时代来临
  2. 2022版全球及中国电梯行业投资建议与盈利价值分析报告
  3. 在项目开始前,为客户做专门的“需求变更流程”培训是必要的
  4. Your CPU supports instructions that this TensorFlow binary was not compiled to use AVX AVX2
  5. 80. 删除排序数组中的重复项 II golang
  6. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 词向量
  7. 单片机modbus rtu通讯_【原创】永宏PLC系列RS485通讯方式
  8. 常用Linux命令:
  9. Linux C++使用MySQL数据库
  10. POJ -- 1573 Robot Motion
  11. 手机软件测试sim卡流程,传统SIM卡:该说再见了
  12. 如何免费下载百度文库文档
  13. C/C++文件指针偏移
  14. Excel中行数据转换为Java对象
  15. python获取键盘按键键值_python获取键值
  16. 2020ECCV|EPNet: Enhancing Point Features with Image Semantics for 3D Object Detection阅读笔记
  17. 批量提取PPT里面包含的图片教程
  18. 3D简单壳体CAD绘制
  19. 《天道》解读三:什么是天道?
  20. 一款吊到不行接私活儿软件!

热门文章

  1. Docker搭建便捷的开发者环境
  2. 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}...
  3. .net性能测试和优化1 基本概念
  4. 骗子公司陆续公布中...
  5. oracle Merge 函数
  6. activity idea编写bpmn流程文件
  7. 感知机模型的对偶形式[转载]
  8. WordPress插件开发-创建、停用、删除插件
  9. -mysql-锁机制分为表级锁和行级锁
  10. vagrant系列教程(四):vagrant搭建redis与redis的监控程序redis-stat(转)