题意:有背包容量为c 给出两个数串 表示两种不同的物品  从物品中任意选多个数

价值是背包剩余空间*选择元素所属数串的系数

问 最大价值

分析: 表面上看起来是个背包题 但是空间太大导致不能背

这里发现先放空间小的换来的价值大 所以我们应该先把两个数串排序 然后枚举

这里由于要考虑次序的问题 于是先放哪个 就需要用动态规划的思路 选择价值更大的

dp[i][j] 表示总要选择第一个类型中前i个数 和第二个类型中j个数 那么这个结果最大的可能就是

max(dp[i][j-1]+第j个物品最后放进去的价值,dp[i-1][j]+第i个物品放进去的价值)

code:注意如果把dp数组全 memset 会超时 循环初始化才会没问题  后来用java写超时 用c写过了 。。。 无语的java

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2010;
ll sum1[maxn],sum2[maxn],dp[maxn][maxn];
int a[maxn],b[maxn];
int main() {int t;scanf("%d",&t);while(t--) {int n,m,c;int k1,k2;sum1[0] = sum2[0] = 0;a[0] = b[0] = 0;ll ans=-1;scanf("%d%d%d%d%d",&k1,&k2,&c,&n,&m);for(int i=0;i<=n;i++) {for(int j=0;j<=m;j++)dp[i][j] = 0;}for(int i=1;i<=n;i++) {scanf("%d",&a[i]); }for(int i=1;i<=m;++i) {scanf("%d",&b[i]);}sort(a+1,a+1+n);sort(b+1,b+1+m);for(int i=1;i<=n;i++) {sum1[i] = sum1[i-1] + a[i];}for(int i=1;i<=m;++i) {sum2[i] = sum2[i-1] + b[i];}for(int i=1;i<=n;i++) {ll s = sum1[i];if(c>=s) {dp[i][0] = dp[i-1][0] + k1*(c-s);ans = max(dp[i][0],ans);}}for(int j=1;j<=m;j++) {ll s = sum2[j];if(c>=s) {dp[0][j] = dp[0][j-1] + k2*(c-s);ans = max(dp[0][j],ans);}}for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {ll s = sum1[i] + sum2[j];if(c>=s) {dp[i][j] = max(dp[i-1][j] + k1*(c-s), dp[i][j-1] + k2*(c-s));ans = max(dp[i][j], ans);}}}printf("%lld\n",ans);}}

Schrödinger's Knapsack ZOJ - 4019 线性DP相关推荐

  1. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  2. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  3. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

  4. CodeForces - 1096D Easy Problem(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...

  5. CodeForces - 456C Boredom(线性dp)

    题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...

  6. POJ - 1050 To the Max(最大连续子段和,线性dp)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵,每个点都有一个权值,现在要从中选取一个子矩阵要求权值和最大,问这个最大权值和是多少 题目分析:因为是要求子矩阵的权值和最大的问题,我们可以直接维护一 ...

  7. 牛客 - 「火」皇家烈焰(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...

  8. CH 5102 Mobile Service(线性DP)

    CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...

  9. 动态规划 —— 线性 DP

    [概述] 线性动态规划,是较常见的一类动态规划问题,其是在线性结构上进行状态转移,这类问题不像背包问题.区间DP等有固定的模板. 线性动态规划的目标函数为特定变量的线性函数,约束是这些变量的线性不等式 ...

最新文章

  1. .NET 中创建支持集合初始化器的类型
  2. 查看Oracle实例的EM端口
  3. magento如何在首页显示产品
  4. Linux 发行版本简介 (zz)
  5. 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
  6. OpenGL---GLUT教程(一) GLUT简介,体系
  7. jQuery实现倒计时重新发送短信验证码功能示例
  8. 【python】【multiprocessing】【Pool、pool.Pool、pool.ThreadPool】apply 和apply_async多进程有关时间的比较分析
  9. 《Head first HTML与CSS 第二版》读书笔记 第一章 了解HTML
  10. 第61篇 笔记-Go 基础
  11. ubuntu 10.04安装 sopcast player
  12. sql语句根据身份证号获取年龄
  13. 《暗时间》----读书笔记
  14. 登陆和登录,login
  15. 从win7到win10的那些事~
  16. ui设计移动端字体适配_移动端UI设计规范全方位汇总(附演示PPT下载)
  17. AOP防止表单重复提交
  18. RFID潜行闭环应用
  19. Leetcode 130. 被围绕的区域
  20. MindMapper中如何添加备注

热门文章

  1. AS3 CookBook学习整理(八)
  2. ASP.NET小技巧——回传后保持页面的滚动位置
  3. hession调用json解析异常 com.caucho.hessian.io.HessianProtocolException: expected integer at 0x74 java.util
  4. Android 自定义年月日日期选择器、时分时间选择器
  5. cesium polygon 悬浮在半空中
  6. typescript 动态给class添加方法
  7. vue 子组件更新父组件状态 使用sync
  8. 接口测试到底是什么?如何制造接口数据
  9. c语言see函数,vprintf() - C语言库函数
  10. 计算机右键菜单太多,电脑点击右键太多选项怎么办