题意:
要排一个L长度的序列,当 j 放在 i 后面的时候会增加v[ i ][ j ]的值,求构成L长度序列的最大值。

思路:

可以想到预处理任意两点<i,j>的最大值是多少,然后题目还有个限制,就是长度,那么再加一维k,

DP[k][i][j] 代表长度为k,i 到 j的最大价值。

但是我们看到L很大,这样不行,那么就把长度表示成二进制,dp[0][i][j]为长度为1时,i到j的最大价值,dp[k][i][j]代表长度为(2^k+1),i到j的最大价值。

最后求长度L的最大值。

贴一发大神的code。。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL INF=1e18;
const int N=1e2+10;LL f[20][N][N],g[2][N];
int n,L;int main()
{int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&L);for(int i=0;i<n;i++)for(int j=0;j<n;j++)scanf("%lld",&f[0][i][j]);--L;int lev=0;for(int i=0;(1<<(i+1))<=L;i++){for(int j=0;j<n;j++)for(int k=0;k<n;k++){f[i+1][j][k]=-INF;for(int x=0;x<n;++x)f[i+1][j][k]=max(f[i][j][x]+f[i][x][k],f[i+1][j][k]);}++lev;}int cur=0;fill(g[cur],g[cur]+n,0);for(int i=lev;i>=0;--i){if(L<(1<<i)) continue;L-=(1<<i);cur=1-cur;fill(g[cur],g[cur]+n,-INF);for(int j=0;j<n;j++)for(int k=0;k<n;k++)g[cur][k]=max(g[1-cur][j]+f[i][j][k],g[cur][k]);}printf("%lld\n",*max_element(g[cur],g[cur]+n));}return 0;
}

转载于:https://www.cnblogs.com/keyboarder-zsq/p/6777406.html

zoj2901【DP·二进制优化】相关推荐

  1. 多重背包:经典DP问题( 基本/二进制优化/单调队列优化 )

    目录 基本方法 **二进制优化 *****单调队列优化 多重背包问题描述:介于01背包和完全背包问题之间,每种物品的最大选取数目都是已知的. 对于一定数量( i )的物品有一个容量为( j )的背包, ...

  2. CF577B Modulo Sum(dp,抽屉原理 | bitset优化 | 二进制优化)

     洛谷链接: Modulo Sum - 洛谷 思路: 明显是一个背包问题,要求子序列和整除m,即sum%m = 0,所以边取模边求和即可.但是朴素做法的时间复杂度是O(nm),会TLE.有三种优化思路 ...

  3. 2021百度之星初赛 A迷失(DP+flody+二进制优化)

    link 题意: 小 T 迷失在了一个有 n 个点的群岛上. 初始时他在 1 号岛,他要通过架在岛间的 m 座双向桥,在正好过 k 座桥时达到 n 号岛的大门. 这些桥中有若干座附魔桥.当小 T 经过 ...

  4. 为了OFFER,菜鸟的我必须搞懂动态规划系列三个背包问题之多重背包(二进制优化方法)

    @Author:Runsen @Date:2020/9/17 多重背包有三层循环,如果数据非常的大,那么程序就会变得非常悲伤.在多重背包的问题,其实更多的是考查多重背包的二进制优化方法.学习二进制优化 ...

  5. 多重背包问题以及二进制优化

    2020.12.30开始学习AcWing算法<算法竞赛进阶指南>: 上传博客方便复习. 多重背包问题(N<= 100): //Wecccccccc //2020.12.31 #inc ...

  6. hdu-2844 Coins (混合背包+二进制优化)

    HDU链接 文章目录 题目描述: 题意: 题解 (代码) 题目描述: 输入描述: 输出描述: For each test case output the answer on a single line ...

  7. 【学习笔记】多重背包相关优化——二进制优化/单调队列优化

    多重背包--二进制优化/单调队列优化 二进制优化 单调队列优化 代码都是 POJ1742 的,注意,那道题二进制优化会超时. 普通的多重背包式子,物品个数限制:c[i]c[i]c[i],单个物品价值 ...

  8. [多重背包+二进制优化]HDU1059 Dividing

    题目链接 题目大意: 两个人要把一堆宝珠,在不能切割的情况下按照价值平分,他们把宝珠分成6种价值,每种价值的宝珠n个. n<=200000 思考: 首先如果加和下来的价值是一个偶数 那么还分毛啊 ...

  9. 多重背包(二进制优化)

    问题概述:有一个容量为V的背包和n个物品,第i种物品最多有n[i]件可用,每件体积是w[i],求解将哪些物品装入背 包可使这些物品的价值尽可能接近V但不大于V(POJ1276) 输入样例:       ...

最新文章

  1. 利用人脑神经突触进行网络模型剪枝
  2. NSKeyedUnarchiver简单的数据存储
  3. CCleaner v5.12.5431 单文件汉化版
  4. python写剧情文字游戏_文字游戏引擎试用心得之一:Ren'py 和 Fungus
  5. 女子800米跑进4分30秒才合格,茅台回应应聘者需体测...
  6. PostgreSQL on Linux 最佳部署指南
  7. Windows Phone开发(15):资源
  8. angular学习笔记
  9. mysql用户管理--密码管理
  10. 人力资源管理系统需求分析报告及系统架构图
  11. C 语言绝对值函数abs实现技巧
  12. activiti 获取审批人员_activiti,根据任务id获取该任务节点配置的获选人或者获选组...
  13. 人工神经网络分析方法,人工神经网络算法步骤
  14. 修改MTK平台Android P系统支持系统A/B分区升级
  15. 分布式存储系统——HBase
  16. ACM图论+数据结构杂题总结
  17. Python+Appium【第三章】Adb元素定位
  18. Window10安装配置TWinCat3
  19. 复旦计算机学院博士张磊,张磊-计算机与信息工程学院官网
  20. elementUI的el-table的树形结构

热门文章

  1. SQL错误Duplicate column name 'NAME'名字重复应使用别名
  2. c语言中线程的特性,具有C 11多线程的特征库
  3. 数据挖掘技术之离群点检测
  4. 大数据分析,利用向外扩展技术深入挖掘商业价值
  5. allure 测试报告本地打开_Allure自动化测试报告我是这样用的
  6. java当前时间查询,Java实现查询记录的时间相对于当前时间
  7. python 语法提示_Python 语法提示vim配置
  8. 学生教育云平台登录入口_学校安全教育平台登录入口
  9. 【知识索引】【C++入门】
  10. Builder 模式在 Guava 中的应用