题意:

  第一类物品的价值为k1,第二类物品价值为k2,背包的体积是 c ,第一类物品有n 个,每个体积为S11,S12,S13,S14.....S1n ; 第二类物品有 m 个,每个体积为 S21,S22,S23,S24.......S2m;

每次装入物品时,得到的价值是 剩余背包体积*该类物品的价值;问最多能得到的总价值是多少。

思路:

  要想得到最大的总价值,肯定要从小的开始装,然后分别枚举第一类,第二类装进去的最大体积,还有将两类回合装入背包的最大体积,得到最后的答案

  我们用dp[i][j],来表示 1 - i 的第一种物品区间,1 - j 的第二种物品区间,即装入 1到 i 的一类物品和 1 到 j 的二类物品的所得到的最大价值

 #include <iostream>
#include <algorithm>
using namespace std;
const int maxn = ;
typedef long long ll; int t;
ll dp[maxn][maxn];
ll c1, c2, c;
ll v1[maxn], v2[maxn], sum1[maxn], sum2[maxn]; int main(){
cin >> t;
while (t--){
cin >> c1 >> c2 >> c;
int n, m;
cin >> n >> m; for (int i = ; i <= n; i++)
cin >> v1[i];
for (int i = ; i <= m; i++)
cin >> v2[i]; sort(v1 + , v1 + + n);
sort(v2 + , v2 + + m);
for (int i = ; i <= n; i++)
sum1[i] = sum1[i - ] + v1[i];
for (int i = ; i <= m; i++)
sum2[i] = sum2[i - ] + v2[i]; for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
dp[i][j] = ; ll ans = ;
for (int i = ; i <= n; i++)
if (sum1[i] <= c){
dp[i][] = c1*(c - sum1[i]) + dp[i - ][];
ans = max(ans, dp[i][]);
}
for (int j = ; j <= m; j++)
if (sum2[j] <= c){
dp[][j] = c2*(c - sum2[j]) + dp[][j - ];
ans = max(ans, dp[][j]);
} for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
{
ll cnt = sum1[i] + sum2[j];
if (cnt <= c)
{
dp[i][j] = max(dp[i - ][j] + c1*(c - cnt), dp[i][j - ] + c2*(c - cnt));
ans = max(ans, dp[i][j]);
}
}
cout << ans << endl;
}
return ;
}

ZOJ 4019 Schrödinger's Knapsack (from The 18th Zhejiang University Programming Contest Sponsored by TuSimple)的更多相关文章

  1. ZOJ 4016 Mergeable Stack(from The 18th Zhejiang University Programming Contest Sponsored by TuSimple)

    模拟题,用链表来进行模拟 # include <stdio.h> # include <stdlib.h> typedef struct node { int num; str ...

  2. 152 - - G Traffic Light 搜索(The 18th Zhejiang University Programming Contest Sponsored by TuSimple )

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5738 题意 给你一个map 每个格子里有一个红绿灯,用0,1表示 ...

  3. zoj 4020 The 18th Zhejiang University Programming Contest Sponsored by TuSimple - G Traffic Light(广搜)

    题目链接:The 18th Zhejiang University Programming Contest Sponsored by TuSimple - G Traffic Light 题解: 题意 ...

  4. The 19th Zhejiang University Programming Contest Sponsored by TuSimple (Mirror) B"Even Number Theory"(找规律???)

    传送门 题意: 给出了三个新定义: E-prime : ∀ num ∈ E,不存在两个偶数a,b,使得 num=a*b;(简言之,num的一对因子不能全为偶数) E-prime factorizati ...

  5. ZOJ 4033 CONTINUE...?(The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple)

    #include <iostream> #include <algorithm> using namespace std; ; int a[maxn]; int main(){ ...

  6. ZOJ 4019 Schrödinger's Knapsack

    Schrödinger's Knapsack Time Limit: 1 Second      Memory Limit: 65536 KB DreamGrid has a magical knap ...

  7. ZOJ - 4019 Schrödinger's Knapsack (背包,贪心,动态规划)

    [传送门]http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5747 [题目大意]:薛定谔的背包.薛定谔的猫是只有观测了才知道猫的死 ...

  8. ZOJ 3962 E.Seven Segment Display / The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple E.数位dp

    Seven Segment Display Time Limit: 1 Second      Memory Limit: 65536 KB A seven segment display, or s ...

  9. zoj4019 Schrödinger's Knapsack(dp)

    题意:有两种物品分别为n,m个,每种物品对应价值k1,k2.有一个容量为c的背包,每次将一个物品放入背包所获取的价值为k1/k2*放入物品后的剩余体积.求问所获取的最大价值. 整体来看,优先放入体积较 ...

随机推荐

  1. IE6 PNG图片不透明的解决方案-tinypng

    https://tinypng.com/ 把图片上传上去,就能处理这个问题啦. 纠正一下 再也不用把png图片一个个拖到TinyPNG进行在线压缩(和熊猫哥哥说再见了):再不用把JPG/JPEG图片拖 ...

  2. 代码空间项目 -- 获取当前时间之前的某一天-Calender类的使用

    Calendar类的静态方法getInstance()可以初始化一个日历对象:Calendar now = Calendar.getInstance(); 1.Calendar的基本用法calenda ...

  3. (转)findViewById 返回为null (自定义控件)

    一.自定义控件 findViewById返回为null 首先讲一个具体的问题,这几天在做demo时,写了一个自定义组合控件,最后在run的时候显示这两行报错.原先还以为是setOnClickListe ...

  4. linux内核段属性机制【转】

    本文转载自:https://github.com/TongxinV/oneBook/issues/9 linux内核段属性机制 以subsys_initcall和module_init为例 subsy ...

  5. 人生苦短之Python枚举类型enum

    枚举类型enum是比较重要的一个数据类型,它是一种数据类型而不是数据结构,我们通常将一组常用的常数声明成枚举类型方便后续的使用.当一个变量有几种可能的取值的时候,我们将它定义为枚举类型.在Python ...

  6. jinja 多值合并

    示例 {% for node in groups["db"] %} {{ node | join("") }}:5672 {% if not loop.last ...

  7. COGS【345】共荣圈 && 【426】血帆海盗

    题面 UPD:COGS 貌似进不去了,链接失效就删掉了. 如果你不小心看到了题目评论区,那你就会知道这是一道双倍经验题,另一题的链接见题目评论区…… 网络流+tarjan好题,但如果你真的的理解了网络 ...

  8. 【Codeforces】879D. Teams Formation 思维+模拟

    题意 给定$n$个数,重复拼接$m$次,相邻$k$个重复的可消除,问最后序列中有多少个数 首先可以发现当$k>=n$时,如果要使$n$个数可以被消除,那么$n$个数必须一样,否则$n$个数不能被 ...

  9. AC自动机-题目集合

    AC自动机-题目集合 模板 如果你想要学习AC自动机,推荐一些学习资料. 学习可以看这篇博客 http://blog.csdn.net/niushuai666/article/details/7002 ...

  10. JDBCTool

    新建 *.properties属性文件,内容如下: driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/dbName userna ...