题目:https://www.luogu.org/problemnew/show/P1417

与普通的01背包不同的一点是加入物品的顺序对结果有影响,这里可以考虑贪心的想法,把对全局影响最小的物品排在前面;

排序不仅要考虑每件物品自身的时间大小,还要考虑对后面计算时的影响;

可以先从只有两个物品排序考虑,若有x和y,分两种情况:

1.x排在y前面:价值总和=(x.a-x.b*x.c)+(y.a-y.b*y.c-y.b*x.c);

2.y排在x前面:价值总和=(y.a-y.b*y.c)+(x.a-x.b*x.c-x.b*y.c);

可以看到唯一的不同就是减去(y.b*x.c)还是(x.b*y.c);

所以排序基准为:y.b*x.c<y.c*x.b;

代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. int t,n;
  6. long long f[100005],mx;
  7. struct N{
  8. long long a,b,c;
  9. }m[55];
  10. bool cmp(N x,N y)
  11. {
  12. return y.b*x.c<y.c*x.b;
  13. }
  14. int main()
  15. {
  16. scanf("%d%d",&t,&n);
  17. for(int i=1;i<=n;i++)
  18. scanf("%lld",&m[i].a);
  19. for(int i=1;i<=n;i++)
  20. scanf("%lld",&m[i].b);
  21. for(int i=1;i<=n;i++)
  22. scanf("%lld",&m[i].c);
  23. sort(m+1,m+n+1,cmp);
  24. for(int i=1;i<=n;i++)
  25. for(long long j=t;j>=0;j--)
  26. if(j>=m[i].c)//不是>!
  27. f[j]=max(f[j-m[i].c]+m[i].a-m[i].b*j,f[j]);
  28. for(long long i=0;i<=t;i++)
  29. if(f[i]>mx)mx=f[i];
  30. printf("%lld",mx);
  31. return 0;
  32. }

  

P1417烹调方案——背包问题中的排序的更多相关文章

  1. P1417 烹调方案 /// DP(假设 简化公式 排序)

    题目大意: https://www.luogu.org/problemnew/show/P1417 题解 看第一份方法的公式 排序后01背包 #include <bits/stdc++.h> ...

  2. P1417 烹调方案

    P1417 烹调方案 题目提供者tinylic 标签 动态规划 难度 普及+/提高 题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船 ...

  3. 【洛谷】【动态规划/背包】P1417 烹调方案

    由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的食物准备填 ...

  4. [洛谷P1417 烹调方案]贪心+dp

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3211Dream City Time Limit: 1 Second     ...

  5. P1417 烹调方案(思维+01背包)

    (点击此处查看原题) 题意 有n种食材,每种食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间.问在T时间内,什么样的烹调方案 ...

  6. 洛谷P1417 烹调方案

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  7. 洛谷 P1417 烹调方案

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  8. P1417 烹调方案 (0/1背包+贪心)

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  9. P1417 烹调方案 背包DP

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

随机推荐

  1. JBossWeb/Tomcat 初始化连接器和处理 Http 请求过程

    概述 JBossWeb 是JBoss 中的 Web 容器.他是对 Tomcat 的封装,本文以 Http 连接器为例.简单说明 JBossWeb/Tomcat 初始化连接器和处理 Http 请求过程 ...

  2. [转]解析ASP.NET WebForm和Mvc开发的区别

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  3. 九度OJ 1064:反序数 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3758 解决:2773 题目描述: 设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321) 求N的值 输入: 程序无任 ...

  4. 我的Java开发学习之旅------>计算从1到N中1的出现次数的效率优化问题

    有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数.比如f(1)=1:f(13)=6,问一个最大的能满足f(n)=n中的n是什么? 例如:f(13)=6, 因为1, ...

  5. 微软Azure区块链开发工具包三大功能详解

    2018年11月15日,微软宣布了Azure区块链开发工具包,它基于微软的无服务器技术构建,并且利用微软和第三方SaaS,完美集成了区块链.该工具包扩展了微软的区块链开发模板和Azure Blockc ...

  6. Django--组件-用户认证Auth(auth_user增加字段)

    引入 :  from django.db import models from django.contrib.auth.models import AbstractBaseUser 源码 :  fro ...

  7. String源码中hashCode算法

    针对java中String源码hashcode算法源码分析 /** The value is used for character storage. */ private final char val ...

  8. Java多线程系列 基础篇09 Object.wait/notifyJVM源码实现

    转载 https://www.jianshu.com/p/f4454164c017 作者 占小狼 最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为java ...

  9. java2 -宏观了解

    java2 -宏观了解 2016-01-24 16:17 308人阅读 评论(38) 收藏 举报  分类: JAVA(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. Java2平台包括: ...

  10. 2-mybatis框架

    mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需 ...