ZOJ 3703 Happy Programming Contest(贪心+0/1背包)
2013-04-20 17:59
525 查看
首先要对每个问题按照所用时间排序,才能保证出来的惩罚时间最小
用一个dp数组保存在j时间解决问题i所能得到的attractiveness最大值
用一个solcnt数组保存解决的问题数量
用一个preTime数组保存当前问题的提交时间
用一个peanlSum保存在j时间解决问题i所用的惩罚时间总和
这样就可以DP了
比赛的时候用的一维数组怎么都过不了,赛后用了二维数组才过了
用一个dp数组保存在j时间解决问题i所能得到的attractiveness最大值
用一个solcnt数组保存解决的问题数量
用一个preTime数组保存当前问题的提交时间
用一个peanlSum保存在j时间解决问题i所用的惩罚时间总和
这样就可以DP了
比赛的时候用的一维数组怎么都过不了,赛后用了二维数组才过了
#include <iostream> #include <memory.h> #include <cstdio> #include <algorithm> #include <vector> using namespace std; const int maxn=1010; struct prob { int attr,sl; bool operator<(const prob &rhs)const{ return sl<rhs.sl||(sl==rhs.sl&&attr>rhs.attr); } }pbs[65]; int dp[65][maxn],solcnt[65][maxn],penalSum[65][maxn],preTime[65][maxn],len,n; int main(){ int t; scanf("%d",&t); while (t--){ scanf("%d%d",&len,&n); for (int i=1;i<=n;++i){ scanf("%d",&pbs[i].sl); } for (int i=1;i<=n;++i){ scanf("%d",&pbs[i].attr); } sort(pbs+1,pbs+n+1); memset(dp,0,sizeof(dp)); memset(solcnt,0,sizeof(solcnt)); memset(preTime,0,sizeof(preTime)); memset(penalSum,0,sizeof(penalSum)); for (int i=1;i<=n;++i){ for (int j=0;j<=len;++j){ if(pbs[i].sl<=j){ int u1=dp[i-1][j],u2=dp[i-1][j-pbs[i].sl]+pbs[i].attr; int v1=solcnt[i-1][j],v2=solcnt[i-1][j-pbs[i].sl]+1; int q1=penalSum[i-1][j],q2=penalSum[i-1][j-pbs[i].sl]+preTime[i-1][j-pbs[i].sl]+pbs[i].sl; if(u1<u2||(u1==u2&&v1<v2)||(u1==u2&&v1==v2&&q2<q1)){ dp[i][j]=u2; solcnt[i][j]=v2; penalSum[i][j]=q2; preTime[i][j]=preTime[i-1][j-pbs[i].sl]+pbs[i].sl;; }else{ dp[i][j]=u1; solcnt[i][j]=v1; penalSum[i][j]=q1; preTime[i][j]=preTime[i-1][j]; } }else{ dp[i][j]=dp[i-1][j]; solcnt[i][j]=solcnt[i-1][j]; penalSum[i][j]=penalSum[i-1][j]; preTime[i][j]=preTime[i-1][j]; } } } printf("%d %d %d\n",dp [len],solcnt [len],penalSum [len]); } return 0; }
相关文章推荐
- ZOJ 3703 Happy Programming Contest 0-1背包 DP
- ZOJ 3703 Happy Programming Contest(0-1背包)
- ZOJ 3703 Happy Programming Contest(0-1背包)
- ZOJ 3703 Happy Programming Contest (0-1背包,稍微加点处理)
- ZOJ 3703 Happy Programming Contest
- ZOJ 3703 Happy Programming Contest 01背包+记录路径
- ZOJ 3703 Happy Programming Contest(DP)
- ZOJ 3703 Happy Programming Contest
- ZOJ 3703 Happy Programming Contest
- ZOJ 3703 Happy Programming Contest
- zoj 3703 Happy Programming Contest 不平常的01背包
- ZOJ 3703 Happy Programming Contest
- zoj 3703 Happy Programming Contest 不平常的01背包
- 01背包好题 ZOJ3703 Happy Programming Contest
- zoj-5707题 Very Happy Great BG (签到题)The 13th Zhejiang Provincial Collegiate Programming Contest
- (又是一个奇葩题目)Happy Programming Contest
- ZOJ-The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple-E
- zoj 3829 Known Notation The 2014 ACM-ICPC Asia Mudanjiang Regional Contest K 贪心
- 2015 Pacific Northwest Region Programming Contest—Division 2 Problem P — Complexity(字符串、贪心)
- Zoj-5704题 People Counting (带注释) The 13th ZhejiangProvincial Collegiate Programming Contest – I