题干:

In Zhejiang University Programming Contest, a team is called "couple team" if it consists of only two students loving each other. In the contest, the team will get a lovely balloon with unique color for each problem they solved. Since the girl would prefer pink balloon rather than black balloon, each color is assigned a value to measure its attractiveness. Usually, the boy is good at programming while the girl is charming. The boy wishes to solve problems as many as possible. However, the girl cares more about the lovely balloons. Of course, the boy's primary goal is to make the girl happy rather than win a prize in the contest.

Suppose for each problem, the boy already knows how much time he needs to solve it. Please help him make a plan to solve these problems in strategic order so that he can maximize the total attractiveness value of balloons they get before the contest ends. Under this condition, he wants to solve problems as many as possible. If there are many ways to achieve this goal, he needs to minimize the total penalty time. The penalty time of a problem is equal to the submission time of the correct solution. We assume that the boy is so clever that he always submit the correct solution.

Input

The first line of input is an integer N (N < 50) indicating the number of test cases. For each case, first there is a line containing 2 integers T (T <= 1000) and n (n <= 50) indicating the contest length and the number of problems. The next line contains n integers and the i-th integer ti (ti <= 1000) represents the time needed to solve the ith problem. Finally, there is another line containing n integers and the i-th integer vi (vi <= 1000) represents the attractiveness value of the i-th problem. Time is measured in minutes.

Output

For each case, output a single line containing 3 integers in this order: the total attractiveness value, the number of problems solved, the total penalty time. The 3 integers should be separated by a space.

Sample Input

2
300 10
10 10 10 10 10 10 10 10 10 10
1 2 3 4 5 6 7 8 9 10
300 10
301 301 301 301 301 301 301 301 301 301
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000

Sample Output

55 10 550
0 0 0

题目大意:

给出比赛时间和题目数,并给出每道题目的耗时以及获得的价值,找出所能获得的最大价值,获得这个最大价值下的最多题目数以及最少罚时,这里的罚时理解的半天,举第一个例子:A掉第一道题需要用时10分钟,然后第二道题也需要10分钟,即第二道题得在20分钟的时候A掉,所以两道题的罚时是10+20。

解题报告:

直接用他给定的优先级就行了,按照优先级排序然后按照这个优先级顺序进行重载小于号然后做背包就行了。好题一只。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
int n,T;
struct Node {ll val,t;
} node[MAX];
struct N {ll val,num,t;N(){}N(ll val,ll num,ll t):val(val),num(num),t(t){}bool operator<(const N b)const{if(val != b.val) return val < b.val;if(num != b.num) return num < b.num;return t > b.t;}
} dp[MAX];
bool cmp(Node a,Node b) {return a.t < b.t;
}
int main()
{int t;cin>>t;while(t--) {scanf("%d%d",&T,&n);memset(dp,0,sizeof dp);for(int i = 1; i<=n; i++) scanf("%lld",&node[i].t);for(int i = 1; i<=n; i++) scanf("%lld",&node[i].val);sort(node+1,node+n+1,cmp);N ans = N(0,0,0);for(int i = 1; i<=n; i++) {for(int j = T; j>=node[i].t; j--) {N pre = dp[j-node[i].t];N tmp = N(pre.val + node[i].val,pre.num + 1,pre.t + j);if(dp[j] < tmp) dp[j] = tmp;if(ans < dp[j]) ans = dp[j];}}printf("%lld %lld %lld\n",ans.val,ans.num,ans.t);}return 0 ;
}

*【ZOJ - 3703】Happy Programming Contest(带优先级的01背包)相关推荐

  1. ZOJ 3703 Happy Programming Contest 0-1背包 DP

    ZOJ 3703 Happy Programming Contest 题目描述: 题目链接:ZOJ 3703 Happy Programming Contest 题目大意: 这是一道虐狗的题目.讲的是 ...

  2. 【ZOJ - 3703】Happy Programming Contest(带优先级的01背包,贪心背包)

    题干: In Zhejiang University Programming Contest, a team is called "couple team" if it consi ...

  3. 2015 German Collegiate Programming Contest (GCPC 15)

    2015 German Collegiate Programming Contest (GCPC 15) B. Bounty Hunter II 给定一张DAG,求一种方案:用最少的路径将所有点覆盖. ...

  4. Sichuan University Programming Contest 2018 Preliminary

    嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...

  5. 2015 HIAST Collegiate Programming Contest J

    Polygons Intersection 题意:给2个凸多边形,求相交面积 思路:不会,套板子就是了 AC代码: #include "iostream" #include &qu ...

  6. (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)

    layout: post title: (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017) au ...

  7. The 15th UESTC Programming Contest Preliminary C - C0ins cdoj1554

    地址:http://acm.uestc.edu.cn/#/problem/show/1554 题目: C0ins Time Limit: 3000/1000MS (Java/Others)     M ...

  8. 【AtCoder】diverta 2019 Programming Contest 2

    diverta 2019 Programming Contest 2 A - Ball Distribution 特判一下一个人的,否则是\(N - (K - 1) - 1\) #include &l ...

  9. 2018 German Collegiate Programming Contest (GCPC 18)

    2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...

最新文章

  1. [Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
  2. oracle表空间的创建及dmp 文件的导入
  3. WPF 4 开发Windows 7 跳转列表(JumpList)
  4. 056_Unicode字符官方标准七
  5. SQL Server T-SQL高级查询
  6. 儿子获奖发明和父亲研究所成果高度相似,还不止一个
  7. 1.9 编程基础之顺序查找 11 连续出现的字符 python
  8. JDBC 与ODBC的区别
  9. Android 常用颜色值及半透明效果配置
  10. 软件开发人员如何记笔记
  11. Sencha touch 开发指南
  12. 去日本东京旅行(2)-- 国内机场停车篇
  13. 计院生活--第一章 卧薪尝胆
  14. 使用python发送邮件(新浪)
  15. 2014蓝桥杯B组初赛试题《啤酒和饮料》
  16. 计算机vfp二级sql,计算机二级vfp-SQL命令集合.doc
  17. Java中的八种基本数据类型
  18. Autocad、中望CAD自动加载程序研究(注册表法、acad.rx、acaddoc.lsp或acad.lsp)
  19. linux常用命令详解 1
  20. 2017第20届济南国际机床展览会会刊(参展商名录)

热门文章

  1. Windows修改注册表按键映射
  2. array专题3-一道题目不断分析就会慢慢有了思路
  3. [Leetcode][第347题][JAVA][前K个高频元素][优先队列][堆][遍历set/map]
  4. java 调用r语言包传参数_Java与R语言的配置,调用
  5. python无法对存在交叉部分的图片进行识别_Python异常样本识别 交叉验证出现错误?...
  6. 操作系统短作业优先(SJF)调度算法
  7. new 3ds右摇杆测试软件,电击杂志编辑新3DS评测:防抖3D效果拔群!
  8. ff14拆区后哪个服务器人最多,FF14拆区可以转服吗 拆区期间转服教程
  9. linux链接达梦数据库,linux下面 达梦数据库的JDBC链接
  10. python数据可视化工具 pandas_Pandas数据可视化工具——Seaborn用法整理(下)