1166 矩阵取数游戏[区间dp+高精度]】的更多相关文章

1166 矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description [问题描述]帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下:1. 每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素:2. 每次取走的各个元素只能是该元素所在行的行首或行尾:3. 每次取数都有一个得分值,为每行取数的得分之…
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共nn个.经过mm次后取完矩阵内所有元素: 每次取走的各个元素只能是该元素所在行的行首或行尾: 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值\times 2^i×2i,其中ii表示第ii次取数(从11开始编号): 游戏结束总得分为mm次取数得分之和. 帅帅想请你帮忙写…
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后取完矩阵内所有元素: 每次取走的各个元素只能是该元素所在行的行首或行尾: 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值\(\times 2^i\)*,其中i表示第i次取数(从1开始编号): 游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵…
传送门 和奶牛那个题很像,每一行状态互不影响,也就是求 n 遍DP 不过高精度非常恶心,第一次写,调了我一上午. ——代码 #include <cstdio> #include <cstring> #include <iostream> struct Big_int { ], idx; Big_int() { idx = ; memset(s, , sizeof(s)); } }; int n, m; Big_int ans, a[], f[][]; inline vo…
二次联通门 : codevs 1166 矩阵取数游戏 /* codevs 1166 矩阵取数游戏 SB区间dp dp[l][r] = max (dp[l + 1][r] + number[l], dp[l][r - 1] + number[r]) * 2; 不过要套高精 我用的高精是全部封装好的 可以像平时的int等类型用 缺点就是慢... 慢差不多1/3吧.. */ #include <iostream> #include <cstdio> #include <vector…
描述 http://codevs.cn/problem/1166/ 分析 #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; ; struct Bign{ int x[maxn],cnt; int & operator [] (int id){ return x[id]; } Bign(){ memset(…
这题做了至少5个小时= =,虽然思路一开始就确定了,但是因为一些错误,比如dp公式里的+打成*,状态未初始化等原因调了好久(>_<) 最后还是参照着别人的解题报告找到错误. 大数模板直接拿了学长的,下次自己写一个加深理解吧. #include<iostream> #include <cstring> #include <cmath> #include <algorithm> #include <cstdio> using namesp…
题目链接:传送门 题目大意: 给定长度为m的数列aj,每次从两端取一个数,得到2k * aj的价值(k为当前的次数,从1开始到m),总共有n行这样的数列,求最大价值总和. 1 ≤ n, m ≤ 80, 0 ≤ aj ≤ 1000; 思路: 状态f[i][j]表示取剩下ai,ai+1,…,aj时的最大价值. 起始状态: f[0][m-1] = 0: 转移方程: f[i][j-1] = max(f[i][j-1], f[i][j] + 取掉aj得到的价值): f[i+1][j] = max(f[i+…
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的压位,感觉…
题面 传送门:https://www.luogu.org/problemnew/show/P1005 Solution 我们可以先考虑贪心 我们每一次都选左右两边尽可能小的数,方便大的放在后面 听起来挺OK的 实则并不OK 反例: 3 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 如果贪心的话,我们会优先把右边那一串2先选了,再去选3和1 但是正确答案显然是先把3和1选了,再去选那一串2 既然贪心不成,我们可以考虑一下DP 然后我们考虑这样一个状态: f[i][j][k] 表示第i…