鱼C论坛

 找回密码
 立即注册
查看: 1734|回复: 0

[技术交流] c++刷leetcode(1402. 做菜顺序)【回溯+贪心算法思想】

[复制链接]
发表于 2020-4-27 13:11:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 糖逗 于 2020-4-27 13:23 编辑

题目描述:
一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。

一道菜的 「喜爱时间」系数定义为烹饪这道菜以及之前每道菜所花费的时间乘以这道菜的满意程度,也就是 time[i]*satisfaction[i] 。

请你返回做完所有菜 「喜爱时间」总和的最大值为多少。

你可以按 任意 顺序安排做菜的顺序,你也可以选择放弃做某些菜来获得更大的总和。

 

示例 1:

输入:satisfaction = [-1,-8,0,5,-9]
输出:14
解释:去掉第二道和最后一道菜,最大的喜爱时间系数和为 (-1*1 + 0*2 + 5*3 = 14) 。每道菜都需要花费 1 单位时间完成。
示例 2:

输入:satisfaction = [4,3,2]
输出:20
解释:按照原来顺序相反的时间做菜 (2*1 + 3*2 + 4*3 = 20)
示例 3:

输入:satisfaction = [-1,-4,-5]
输出:0
解释:大家都不喜欢这些菜,所以不做任何菜可以获得最大的喜爱时间系数。
示例 4:

输入:satisfaction = [-2,5,-1,0,3,-3]
输出:35
 

提示:

n == satisfaction.length
1 <= n <= 500
-10^3 <= satisfaction[i] <= 10^3


void dfs(vector<int>&input,vector<int>&visit, int cur, int& res, int temp, int len){
        if(cur >= input.size()){
            res = max(res, temp);
            return;
        } 
        
        if(visit[cur] == 0){
            int store = cur;
            visit[cur] = 1;
            temp+=len*input[cur];
            dfs(input, visit, cur+1, res, temp, len+1);
            temp-=len*input[store];
            visit[store] = 0;
        }
             
    }
    int maxSatisfaction(vector<int>& satisfaction) {
        sort(satisfaction.begin(), satisfaction.end());
        int len = satisfaction.size();
        int res = 0;
        for(int i = 0; i < len ; i++){
            vector<int> visit(len, 0);
            dfs(satisfaction,visit, i, res, 0, 1);
            cout <<res <<endl;
        }
        
        return res;
        
    }

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 18:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表