日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天池 在线编程 放小球(动态规划) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 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阿明),一起加油、一起學習進步!

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的天池 在线编程 放小球(动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。