其他分享
首页 > 其他分享> > 西瓜汁加珍珠

西瓜汁加珍珠

作者:互联网

链接:https://ac.nowcoder.com/acm/contest/2763/I
来源:牛客网

题目描述

你有一个20元的餐券,这里共有n种饮品,你可以只买一种,也可以买多种,每种可以只买一杯,也可以买多杯(只要你的钱够)。

每杯饮品原本给予你的满足感和它的价格相同,但珍珠可以使一杯饮品给予你的满足感翻倍,加一份珍珠是2倍,加两份是4倍,加三份是8倍,以此类推。

你可以在任何一杯饮品甚至西瓜汁里加任意份数珍珠(只要你的钱够),每份珍珠2元。

你获得的满足感是你买到的所有饮品的满足感的和,请问你通过这张餐券最多能获得多少满足感。

输入描述:

输入共2行。

第1行:一个正整数n,表示饮品的种类数

第2行:n个由空格分开的正整数pi​,表示第i种饮品的价格

1≤n≤201 \le n \le 201≤n≤20

2≤pi≤202 \le p_i\le 202≤pi​≤20

输出描述:

输出一行,一个正整数,表示你能获得的满足感的最大值
示例1

输入

复制
4
17 18 19 20

输出

复制
36


题解:加珍珠可以让满足感翻倍,所以加珍珠更划算。20块钱买一杯以上饮料不如只买一杯饮料加珍珠划算。计算每杯饮料最多可以加多少珍珠,然后计算出每杯饮料的满足感,取最大的那个
#include <stdio.h>
#include <algorithm>
#define MAX 25
 
using namespace std;
 
int main(){
    int s[MAX];
    int n,r;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++)
            scanf("%d",&s[i]);
        r=0;
        for(int i=0;i<n;i++){
            int k = (20-s[i]) / 2;
            int t = s[i] * pow(2,k);
            r = max(r,t);
        }
        printf("%d\n",r);
    }
    return 0;
}

 

标签:西瓜汁,le,20,珍珠,int,饮品,满足感
来源: https://www.cnblogs.com/shiliuxinya/p/12168695.html