1381 - Scientific Experiment

Time Limit: 20 Sec  Memory Limit: 256 MB

题目连接

http://www.lightoj.com/volume_showproblem.php?problem=1381

Description

John wants to be a scientist. A first step of becoming a scientist is to perform experiment. John has decided to experiment with eggs. He wants to compare the hardness of eggs from different species. He has decided to use a nearby large multi-storied building for this purpose. For each species he will try to find the highest floor from which he can drop the egg and it will not break. The building has (n+1) floors numbered from 0 to n. John has a book from which he knows that

  1. If an egg is dropped from the topmost floor, it will surely break.
  2. If an egg is dropped from floor 0, it will not break.
  3. The eggs of same species are of same strength. That means if any egg breaks when dropped from the kth floor; all the eggs of that species will break if dropped from kth floor.
  4. If an egg is unbroken after dropping it from any floor, it remains unharmed, that means the strength of the egg remains same.

Unfortunately John has a few problems:

  1. He can only carry one egg at a time.
  2. He can buy eggs from a shop inside the building and an egg costs x cents.
  3. To enter the building he has to pay y cents if he has no egg with him and z cents if he carries an egg with him.
  4. After dropping an egg, John must go outside the building to check whether it's broken or not.
  5. He does not want to waste any egg so he will not leave any unbroken egg on the ground. But if an egg is broken, he leaves it there.
  6. If he has an intact egg at the end, he can sell it for x/2 cents. He does not need to enter the building to sell the egg.

These problems are not going to tame John's curious mind. So he has decided to use an optimal strategy and minimize his cost in worst case. As John is not a programmer, he asked your help.

Input

Input starts with an integer T (≤ 50), denoting the number of test cases.

Each case starts with a line containing four integers n x y z as described in the statement. You may assume that 1 < n ≤ 1000 and 1 ≤ x, y, z ≤ 105 and x is even.

Output

For each test case, print the case number and the minimized worst case cost.

Sample Input

7

4 2 998 1000

16 2 1000 1000

16 1000 1 1

4 1000 1 1

7 2 2 2

9 2 1 100

11 2 100 1

Sample Output

Case 1: 2000

Case 2: 4008

Case 3: 1015

Case 4: 1003

Case 5: 10

Case 6: 24

Case 7: 111

HINT

For case 1, John knows that the egg will break if dropped from 4th floor, but will not break if dropped from 0th floor. An optimal solution may be

  1. John enters the building without any egg (¢998).
  2. John buys an egg (¢2).
  3. John drops an egg from 2nd floor. John goes out and checks the egg.
    1. If it breaks,
      1. i.      John again enters the building without any egg (¢998) and buys an egg there ¢2.
      2. ii.      He drops the egg from 1st floor.
        1. If it does not break then answer to his problem is 1 and he can sell the egg for ¢1. So his final cost in ¢1999.
        2. If it breaks then the answer to his problem is 0th floor and his final cost is ¢2000.
  4. If it does not break
    1. i.      John enters the building with the egg (¢1000).
    2. ii.      He drops it from 3rd floor.
      1. If it does not break then answer to his problem is 3 and he can sell the egg for ¢1. So his final cost in ¢1999.
      2. If it breaks then the answer to his problem is 2 and final cost is ¢2000.

So, using this strategy, his worst case cost is ¢2000.

题意

一个评估蛋的硬度方法是测量蛋从多高摔下来会碎。现在佳佳想以楼层高度作为考量依据评估蛋的 硬度。如果蛋从i楼上掉下来会碎,而i-1不会,那么蛋的硬度为i。高为n层的实验楼里面有蛋卖,一个X元。佳佳开始没有蛋,并且他只能随身携带一个蛋, 不带蛋进楼需要Y元,带蛋需要Z元,做完试验之后如果还有一个蛋,可以卖掉得X/2元(卖蛋不需要进楼)。佳佳把鸡蛋扔出去后,会出楼检查蛋的情况。如果 蛋扔下后没有碎掉,佳佳一定会把蛋捡起,然后进楼,如蛋碎掉了,佳佳就不会管它。 佳佳想知道在最糟糕的情况下,测出蛋的硬度最少需要花费多少钱。

题解:

dp[i]表示在楼层高度为i的情况下,检测出碎蛋的位置的最小最差花费是多少

然后转移就好,注意这个dp[i]只和楼层高度有关!

代码:

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 200001
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
//const int inf=0x7fffffff; //нчоч╢С
const int inf=0x3f3f3f3f;
/* inline void P(int x)
{
Num=0;if(!x){putchar('0');puts("");return;}
while(x>0)CH[++Num]=x%10,x/=10;
while(Num)putchar(CH[Num--]+48);
puts("");
}
*/
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void P(int x)
{
Num=;if(!x){putchar('');puts("");return;}
while(x>)CH[++Num]=x%,x/=;
while(Num)putchar(CH[Num--]+);
puts("");
}
//**************************************************************************************
ll dp[maxn];
ll d1,d2;
int n,x,y,z;
int main()
{
int t=read();
for(int cas=;cas<=t;cas++)
{
n=read(),x=read(),y=read(),z=read();
dp[]=dp[]=;
for(int i=;i<=n;i++){
dp[i]=inf;
for(int j=;j<i;j++)
{
d1=dp[j]+x+y;
d2=dp[i-j]+z;
if(i-j==)
d2=y+x/;
dp[i]=min(dp[i],max(d1,d2));
}
}
printf("Case %d: %lld\n",cas,dp[n]);
}
}

lightoj 1381 - Scientific Experiment dp的更多相关文章

  1. lightoj 1032 二进制的dp

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1032 #include <cstdio> #include <cst ...

  2. lightOJ 1017 Brush (III) DP

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1017 搞了一个下午才弄出来,,,,, 还是线性DP做的不够啊 看过数据量就知道 ...

  3. LightOJ 1068 Investigation (数位dp)

    problem=1068">http://www.lightoj.com/volume_showproblem.php?problem=1068 求出区间[A,B]内能被K整除且各位数 ...

  4. Lightoj 1044 - Palindrome Partitioning (DP)

    题目链接: Lightoj  1044 - Palindrome Partitioning 题目描述: 给一个字符串,问至少分割多少次?分割出来的子串都是回文串. 解题思路: 先把给定串的所有子串是不 ...

  5. lightoj 1084 - Winter(dp+二分+线段树or其他数据结构)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1084 题解:不妨设dp[i] 表示考虑到第i个点时最少有几组那么 if a[i ...

  6. (LightOJ 1030)期望dp

    You are x N grid. Each cell of the cave can contain any amount of gold. Initially you are . Now each ...

  7. lightoj 1027 简单概率dp

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1027 #include<cstdio> #include<cstri ...

  8. URAL 1203 Scientific Conference dp?贪心

    题目:click here 分明就是贪心怎么会在dp的专题 #include <bits/stdc++.h> using namespace std; typedef unsigned l ...

  9. LightOJ 1030 【概率DP求期望】

    借鉴自:https://www.cnblogs.com/keyboarder-zsq/p/6216762.html 题意:n个格子,每个格子有一个值.从1开始,每次扔6个面的骰子,扔出几点就往前几步, ...

随机推荐

  1. 深入理解Spring系列之四:BeanDefinition装载前奏曲

    转载 https://mp.weixin.qq.com/s?__biz=MzI0NjUxNTY5Nw==&mid=2247483835&idx=1&sn=276911368d4 ...

  2. julia 1.0如何使用pkg

    输入]进入pkg模式 add 加包名即可安装,如 add Cxx

  3. WPF之换肤

    WPF之换肤 设计原理 WPF换肤的设计原理,利用资源字典为每种皮肤资源添加不同的样式,在后台切换皮肤资源文件. 截图 上图中,第一张图采用规则样式,第二张图采用不规则样式,截图的时候略有瑕疵. 资源 ...

  4. web deploy 安装失败解决

    单独运行安装包,提示脚本运行失败. VS安装提示解包失败. 解决:检查Windows Management Instrumentation服务状态.需要非禁用.

  5. 中文chrome font-size 10px,11px,12px,rem只为12px解决办法

    问题来源: html { font-size: 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .form-signin { max-wi ...

  6. [置顶] 人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)

    这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...

  7. Elasticsearch分片&副本分配

    集群索引中可能由多个分片构成,并且每个分片可以拥有多个副本,将一个单独的索引分为多个分片,可以处理不能在单一服务器上运行的 大型索引. 由于每个分片有多个副本,通过副本分配到多个服务器,可以提高查询的 ...

  8. Jmeter----5.1 设置中文

    注意:JMeter5需要Java8 以上,本文环境是Win7 64位 设置永久默认汉化:在Jmeter的安装目录下的bin目录中找到 jmeter.properties这个文件,用文本编辑器打开.在# ...

  9. ASP.NET MVC 3和Razor中的@helper

    ASP.NET MVC 3支持一项名为“Razor”的新视图引擎选项(除了继续支持/加强现有的.aspx视图引擎外).当编写一个视图模板时,Razor将所需的字符和击键数减少到最小,并保证一个快速.通 ...

  10. elementUI 学习入门之 layout 布局

    layout 布局 通过基础的 24 分栏,可进行快速布局 基础布局 使用单一分栏创建基础的栅格布局, 通过 span 属性指定每栏的大小 <el-col :span="8" ...