版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/svitter/article/details/24642587

本文出自:http://blog.csdn.net/svitter/

题意:三种苹果,每种都有相应的Size,Value,给你一个背包空间,求最大的价值。

本题目的关键就在于很大的背包空间

根据indicates the size (1 <= S<=
100) 我们能够考虑在1000000(100^3)之外的空间放性价比最高的苹果。

为什么时100^3?

要知道背包假设正好填满,而填满空间相应价值的苹果大于不填满的价值的苹果,那么就选择能填满空间而使价值最大的苹果,而非性价比最高的苹果——性价比高的苹果可能由于剩下的空间不足,而造成空间利用不充分达不到最大价值。100^3大于不论什么3个苹果的Size的最大公倍数,所以选择100^3这个数字。

另:之前把f[1000001]初值赋值为-1, 以此来求背包- =太水了= =全然没有考虑到最后一个f[BagSize]可能为-1的情况。然后写了一个找不是-1的最大Bag值,又水了- =当赋值-1的时候。未必最大的就是空间用的最多的。

简单举例:

BagSize 60, a[1] 59/30, a[2].size 58/31 a[3].size 57/32;

贴代码:

#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std;
#define lln long long int
struct Apple
{
int Value;
int Size;
double Cost;
}; Apple a[3]; lln f[1001000]; void ace()
{
int t, i, j, no, most;
int BagSize, tempBag;
double cost;
lln RestNum, ans, RestValue;
int Size;
scanf("%d", &t);
for(no = 1; no <= t; no++)
{
memset(f, 0, sizeof(f));
f[0] = 0; most = 0; cost = 0;
for(i = 0; i < 3; i++)
{
scanf("%d %d", &a[i].Size, &a[i].Value);
a[i].Cost = ((double) a[i].Value) / a[i].Size;
if(a[i].Cost > cost)//find the most
{
most = i;
cost = a[i].Cost;
}
}
scanf("%d", &BagSize); RestNum = 0;
RestValue = 0;
//大于1000的时候,把性价比最高的苹果填入
if(BagSize > 1000000)
{
tempBag = BagSize - 1000000;
RestNum = tempBag / a[most].Size;
BagSize -= RestNum * a[most].Size;
RestValue = RestNum * a[most].Value;
}
//剩余的苹果使用背包
for(i = 0; i < 3; i++)
{
Size = BagSize - a[i].Size;
for(j = 0; j <= Size; j++)
{
f[j + a[i].Size] = max(f[j + a[i].Size], f[j] + a[i].Value);
}
} ans = RestValue + f[BagSize];
printf("Case %d: %lld\n", no, ans);
}
}
int main()
{
ace();
return 0;
}

sdut2408 pick apples (贪心+背包)山东省第三届ACM省赛的更多相关文章

  1. 山东省第三届ACM省赛

    Solved ID PID Title Accepted Submit   A 2407 Impasse (+) 0 0   B 2415 Chess 0 0   C 2414 An interest ...

  2. Sdut 2409 The Best Seat in ACM Contest(山东省第三届ACM省赛 H 题)(模拟)

    题目描述 Cainiao is a university student who loves ACM contest very much. It is a festival for him once ...

  3. Sdut 2416 Fruit Ninja II(山东省第三届ACM省赛 J 题)(解析几何)

    Time Limit: 5000MS Memory limit: 65536K 题目描述 Haveyou ever played a popular game named "Fruit Ni ...

  4. [原]sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛

    本文出自:http://blog.csdn.net/svitter 原题:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&am ...

  5. [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !

    n a^o7 ! 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2413 Time Lim ...

  6. [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number

    Mine Number 题目:http://acm.sdut.edu.cn/sdutoj/problem.php? action=showproblem&problemid=2410 Time ...

  7. 2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛--n a^o7 ! 分类: 比赛 2015-06-09 17:16 14人阅读 评论(0) 收藏

    n a^o7 ! Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 All brave and intelligent fighte ...

  8. 山东省第八届ACM省赛游记

    Day 1: 凌晨,来了几分兴致,和队友在VJudge上开了一把zoj月赛,WA一发闷一口拿铁,一瓶拿铁 不一会就被喝完了!好气啊!遂开始愉快地打游戏,打着打着,woc,居然3点半了,小睡片 刻,咬上 ...

  9. 山东省第五届ACM省赛

    题目链接:http://acm.sdut.edu.cn/sdutoj/contest_show.php?contest_id=1449 相关总结:http://www.cnblogs.com/mcfl ...

随机推荐

  1. 浅谈Linux

    Linux系统最初由芬兰赫尔辛基大学的Andrew S.Tanenbaum写的MINIX操作系统演变而来,这是一个小型操作系统,主要用于教学,1991年1月,Tanenbaum的学生Linus Tor ...

  2. bzoj2286: [Sdoi2011]消耗战 虚树

    在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望.已知在其他k个 ...

  3. python-day45--mysql索引

    一 .介绍 为何要有索引? 一些复杂的查询操作,对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 什么是索引? 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结 ...

  4. thinkphp3.2导出

    public function test() { set_time_limit(0); ini_set('memory_limit', '500M'); //导入PHPExcel类库,因为PHPExc ...

  5. VirtualBox + Centos 使用NAT + Host-Only 方式联网

    一.准备工作 1. VirtualBox 2. CentOS镜像 备注:我这里准备好了需要下载的文件,有需要的话可以下载一下,分别是VirtualBox-5.1.24-117012-Win.exe,C ...

  6. POJ 3481 treap

    这是利用treap写的二叉排序树,只要理解其中旋转能够改变树的左右子树平衡度,即高度之差,差不多就能掌握treap树的要领了. 相对于其他高级BST,treap树实现应该算最简单了,利用的是随机树产生 ...

  7. JavaScript学习总结(二)——逻辑Not运算符详解

    在JavaScript 中,逻辑NOT运算符与C和Java中的逻辑 NOT 运算符相同,都由感叹号(!)表示.与逻辑 OR 和逻辑 AND 运算符不同的是,逻辑 NOT 运算符返回的一定是 Boole ...

  8. MySql Server 5.7的下载及安装详细步骤

    1.下载安装包 1)找到官网下载地址(https://dev.mysql.com),选择downloads,找到windows

  9. 蓝桥杯—ALGO-12 幂方分解(递归递推)

    问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步 ...

  10. L1-021 重要的话说三遍

    这道超级简单的题目没有任何输入. 你只需要把这句很重要的话 —— “I'm gonna WIN!”——连续输出三遍就可以了. 注意每遍占一行,除了每行的回车不能有任何多余字符. 输入样例: 无 输出样 ...