天池 在线编程 放小球(动态规划)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 动态规划

1. 题目

n 个桶中小球的个数已知, 可以操作 k 次(每次从桶中取出一个球,或者添加一个球),
每个桶有规定的最大容量 W[i]。
求操作后两相邻桶之间的最大差值的平方的最小值

n <= 100
W[i] <= 100样例 1:
输入: 
5
6
[1,2,3,4,5]
[15,15,15,15,15]
说明
共有5个桶,最多操作6次,
桶内的小球分别是1,2,3,4,5,
桶的最大容量分别是15,15,15,15,15。输出: 
0

https://tianchi.aliyun.com/oj/245809026182441523/267721733892674230

2. 解题

2.1 动态规划

  • dp[i][k][w] 表示遍历到 i 号桶,共操作了 k 次,i 号桶的重量为 w 时的 相邻最大差值的平方的最小值
  • 时间复杂度较高:O(nmax⁡(W[i])k2)O(n\max(W[i])k^2)O(nmax(W[i])k2),侥幸过了
class Solution {
public:/*** @param n: the number of buckets* @param k: the maximum times of operations* @param A: the number of balls in each bucket* @param W: the maximum capacity of each bucket* @return: return the minimum square value of the maximum difference*/int getAns(int n, int k, vector<int> &A, vector<int> &W) {// write your code herevector<vector<vector<int>>> dp(n, vector<vector<int>>(k+1, vector<int>(101, INT_MAX)));for(int ki = 0; ki <= k; ++ki){	// 初始化if(A[0]-ki >= 0)//减少球dp[0][ki][A[0]-ki] = 0;//边界if(A[0]+ki <= W[0])//增加球dp[0][ki][A[0]+ki] = 0;}for(int i = 1; i < n; ++i){	//遍历样本for(int k1 = 0; k1 <= k; ++k1){	//到前一个位置为止,共操作了 k1 次for(int w1 = 0; w1 <= W[i-1]; ++w1){    //前一个位置 的重量 w1if(dp[i-1][k1][w1] == INT_MAX)continue;for(int k2 = 0; k2+k1 <= k; ++k2){	// 当前位置的操作次数 k2, 总次数 k1+k2 不能超if(A[i]-k2 >= 0)//拿走一些dp[i][k2+k1][A[i]-k2] = min(dp[i][k2+k1][A[i]-k2], max(dp[i-1][k1][w1], (w1-A[i]+k2)*(w1-A[i]+k2)));if(A[i]+k2 <= W[i])//放进去一些dp[i][k2+k1][A[i]+k2] = min(dp[i][k2+k1][A[i]+k2], max(dp[i-1][k1][w1], (w1-A[i]-k2)*(w1-A[i]-k2)));}}}}int ans = INT_MAX;for(int ki = 0; ki <= k; ++ki){for(int wi = 0; wi <= W[n-1]; ++wi)ans = min(ans, dp[n-1][ki][wi]);}return ans;}
};

401ms C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于计算机书籍的收集与整理(二)

本文来源&#xff1a;https://github.com/justjavac/free-programming-books-zh_CN#%E7%9B%AE%E5%BD%95 国外程序员在 stackoverflow 推荐的程序员必读书籍&#xff0c;中文版。stackoverflow 上的程序员应该阅读的非编程类书籍有哪些&#xff1f; 中文版github 上的一个流行的…

LeetCode 1716. 计算力扣银行的钱(等差数列)

文章目录1. 题目2. 解题1. 题目 Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。 最开始&#xff0c;他在周一的时候存入 1 块钱。 从周二到周日&#xff0c;他每天都比前一天多存入 1 块钱。 在接下来每一个周一&#xff0c;他都会比 前一个周一 多存入 1 块钱…

互联网产品 从设计到运营 这中间提高须要关注的站点

互联网产品 从设计到运营 这中间提高须要关注的站点 https://github.com/edagarli/resourcecollects 转载于:https://www.cnblogs.com/mengfanrong/p/3897858.html

整理与总结Python关于对文件的操作

一、前言 python中对文件、文件夹&#xff08;文件操作函数&#xff09;的操作需要涉及到os模块和shutil模块 二、操作命令 得到当前工作目录&#xff0c;即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文…

LeetCode 1717. 删除子字符串的最大得分

文章目录1. 题目2. 解题374 / 1631&#xff0c;前22.9%1215 / 7873&#xff0c;前15.4%1. 题目 给你一个字符串 s 和两个整数 x 和 y 。你可以执行下面两种操作任意次。 删除子字符串 "ab" 并得到 x 分。 比方说&#xff0c;从 “cabxbae” 删除 ab &#xff0c;得…

利用Python把四张图片按照顺序拼接起来

一、需求&#xff1a; 给出四张图片&#xff0c;按照一定的顺序拼接起来 二、图片&#xff1a; 左上角&#xff1a;&#xff08;像素512*512&#xff09; 右上角&#xff1a;&#xff08;像素284*512&#xff09; 左下角&#xff1a;&#xff08;像素284*512&#xff09; 右…

证券总结

1.暴涨之后&#xff0c;如果没有阳线助涨&#xff0c;则可能跌&#xff0c;也可能震荡&#xff0c;看下一个交易日的状况定夺;暴跌类似。 2.持续小规模阳线&#xff0c;最后稍大阳线&#xff0c;但非暴涨。此时如果下一交易日阴线极有可能是短暂小幅回调&#xff0c;莫做空&…

Linux:文件创建时间如何修改?

一、需求 修改文件创建时间 二、知识及方法步骤 touch命令用于创建空白文件或修改文件时间。 在Linux系统中一个文件有三种时间&#xff1a; 更改内容的时间 - mtime&#xff1a;当文件进行被写的时候&#xff0c;CTime就会更新更改权限的时间 - ctime&#xff1a;当文件的…

面向对象学习笔记

abstract:抽象类或方法的关键字注意事项&#xff1a;一个类中至少有一个抽象方法不允许有大括号主要意义就是规范方法&#xff0c;要求必须按照抽象中的方法来写继承抽象类的类&#xff0c;必须重载完全抽象类的方法抽象类是不能被实例化的&#xff0c;因为本身没有意义 extend…

小案例:编写立方体六个面,合成一张全景图后端

一、需求&#xff1a; 给出立方体六个面&#xff0c;合成一张全景图 二、主要知识&#xff1a;py360convert 2.1、该项目的特点&#xff1a; 立方体贴图和等矩形之间的转换 等角于平面 纯python实现&#xff0c;仅依赖于numpy和scipy矢量化实施&#xff08;在大多数地…

LeetCode 1721. 交换链表中的节点(快慢指针)

文章目录1. 题目2. 解题1. 题目 给你链表的头节点 head 和一个整数 k 。 交换 链表正数第 k 个节点和倒数第 k 个节点的值后&#xff0c;返回链表的头节点&#xff08;链表 从 1 开始索引&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&am…

[Python] NotImplemented 和 NotImplementedError 区别

NotImplemented 是一个非异常对象&#xff0c;NotImplementedError 是一个异常对象。 >>> NotImplemented NotImplemented >>> NotImplementedError <type exceptions.NotImplementedError>>>> type(NotImplemented) <type NotImplemented…

爬虫小案例:基于Bing关键词批量下载图片

一、需求&#xff1a; 基于Bing网站&#xff0c;输入关键词&#xff0c;批量下载图片保存到本地 二、演示&#xff1a; 三、直接上代码 import os import urllib.request import urllib.parse from bs4 import BeautifulSoup import re import time# 设置请求头 header {Us…

LeetCode 1722. 执行交换操作后的最小汉明距离(并查集)

文章目录1. 题目2. 解题1. 题目 给你两个整数数组 source 和 target &#xff0c;长度都是 n 。 还有一个数组 allowedSwaps &#xff0c;其中每个 allowedSwaps[i] [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi&#xff08;下标从 0 开始&#xff09;的两个元素。…

线性表的顺序表示和实现

/* 顺序表存储结构容易实现随机存取线性表的第i 个数据元素的操作&#xff0c;但在实现插入、 删除的操作时要移动大量数据元素&#xff0c;所以&#xff0c;它适用于数据相对稳定的线性表&#xff0c;如职工工资 表、学生学籍表等。 c2-1.h 是动态分配的顺序表存储结构&#x…

爬虫小案例:基于Bing关键词批量下载图片(第二版)

一、需求&#xff1a; 基于Bing网站&#xff0c;输入关键词&#xff0c;批量下载图片保存到本地 二、代码展示&#xff1a; import requests from lxml import etree import os from multiprocessing.dummy import Pool import json from time import time# 作用&#xff1a…

LeetCode 1723. 完成所有工作的最短时间(DFS+剪枝 / 状态压缩DP)

文章目录1. 题目2. 解题2.1 DFS2.2 状态压缩DP265 / 3871&#xff0c; 前6.85% 前3题题解&#xff1a; LeetCode 5649. 解码异或后的数组&#xff08;位运算&#xff09;LeetCode 5652. 交换链表中的节点&#xff08;快慢指针&#xff09;LeetCode 5650. 执行交换操作后的最小…

运维工程师打怪升级进阶之路 V2.0

很多读者伙伴们反应总结的很系统、很全面&#xff0c;无论是0基础初学者&#xff0c;还是有基础的入门者&#xff0c;或者是有经验的职场运维工程师们&#xff0c;都反馈此系列文章非常不错&#xff01; 命名&#xff1a;《运维工程师打怪升级之路》 版本&#xff1a;V1.0版本…

win7优化设置_5项优化,至少提升20%!

Win7系统已经接近落幕的尾声了&#xff0c;不知大家是否早已做好准备了呢&#xff1f;很多朋友说win7不如win10好用&#xff0c;但马克思主义说到“新事物必将会取代旧事物”&#xff0c;也没必要一直坚守着win7的战线啦。自电脑升级了之后&#xff0c;便对win10系统进行了一些…

python实现两张图片横向和纵向拼接

本文实例为大家分享了python实现图片横向和纵向拼接的具体代码&#xff0c; 这里主要用Python扩展库pillow中Image对象的paste()方法把两张图片拼接起来供大家参考&#xff0c;具体内容如下&#xff1a; 一、代码&#xff1a; from PIL import Imagedef join(png1, png2, fl…