ZOJ3703 Happy Programming Contest
来源:互联网 发布:国产纪录片 知乎 编辑:程序博客网 时间:2024/05/17 07:32
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
2300 1010 10 10 10 10 10 10 10 10 101 2 3 4 5 6 7 8 9 10300 10301 301 301 301 301 301 301 301 301 3011000 1000 1000 1000 1000 1000 1000 1000 1000 1000
Sample Output
55 10 5500 0 0
题目的意思是给出总时间和题目的数量,每道题有花费时间和价值,求价值最大是多少,价值最大不唯一时,按题目数量多的排,题目数量也一样按罚时少的排
思路:01背包,加上相等时判定的更新即可
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <vector>#include <set>#include <stack>#include <map>#include <cctype>#include <sstream>#include <climits>using namespace std;#define LL long longconst int INF=0x3f3f3f3f;int mod=1e9+7;struct node{int val,num,t,sum;}dp[1005];struct pro{int w,v;}p[100];bool cmp(pro a,pro b){ if(a.w!=b.w) return a.w<b.w; return a.v>b.v;}int main(){ int T,m,n;scanf("%d",&T);while(T--){ scanf("%d%d",&m,&n); for(int i=0;i<n;i++) scanf("%d",&p[i].w); for(int i=0;i<n;i++) scanf("%d",&p[i].v); memset(dp,0,sizeof dp); sort(p,p+n,cmp); for(int i=0;i<n;i++) { for(int j=m;j>=p[i].w;j--) { if(dp[j].val<dp[j-p[i].w].val+p[i].v) { dp[j].val=dp[j-p[i].w].val+p[i].v; dp[j].num=dp[j-p[i].w].num+1; dp[j].t=dp[j-p[i].w].t+p[i].w; dp[j].sum=dp[j-p[i].w].sum+dp[j].t; } else if(dp[j].val==dp[j-p[i].w].val+p[i].v) { if(dp[j].num<dp[j-p[i].w].num+1) { dp[j].num=dp[j-p[i].w].num+1; dp[j].t=dp[j-p[i].w].t+p[i].w; dp[j].sum=dp[j-p[i].w].sum+dp[j].t; } else if(dp[j].num==dp[j-p[i].w].num+1) { if(dp[j].sum>dp[j-p[i].w].sum+dp[j-p[i].w].t+p[i].w) { dp[j].t=dp[j-p[i].w].t+p[i].w; dp[j].sum=dp[j-p[i].w].sum+dp[j].t; } } } } } printf("%d %d %d\n",dp[m].val,dp[m].num,dp[m].sum);} return 0;}
- ZOJ3703 Happy Programming Contest
- ZOJ3703 Happy Programming Contest
- ZOJ3703-Happy Programming Contest
- ZOJ3703 Happy Programming Contest
- Happy Programming Contest zoj3703 dp
- 01背包好题 ZOJ3703 Happy Programming Contest
- H - Happy Programming Contest
- ZOJ 3703 Happy Programming Contest
- ZOJ 3703 Happy Programming Contest
- ZOJ 3703 Happy Programming Contest
- ZOJ 3703 Happy Programming Contest
- ZOJ 3703 Happy Programming Contest(贪心+0/1背包)
- 北大校赛提前热身,Happy Programming Contest和Digging
- zoj 3703 Happy Programming Contest 不平常的01背包
- (又是一个奇葩题目)Happy Programming Contest
- Happy Programming Contest ZOJ+01背包问题+路径输出
- ZOJ 3703 Happy Programming Contest 0-1背包 DP
- ZOJ 3703 Happy Programming Contest(0-1背包)
- Ubuntu 64位系统中将c++文件编译成链接库(.so文件)
- R_数据正态分布检验
- session的创建时机
- python : turtle 画正多边形
- SSH整合(附上IbaseDao和分页查询)
- ZOJ3703 Happy Programming Contest
- [编程题]循环单词
- 坑记:FFmpeg用movie+overlay做图片水印
- Servlet基础
- Spring总结
- GIT能做什么、它和SVN在深层次上究竟有什么不同
- 表达式求值
- HDU5533 Dancing Stars on Me(计算几何)
- 在Ubuntu14.04上快速部署OpenStack