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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

977 AlvinZH过生日(背包DP大作战S)

發(fā)布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 977 AlvinZH过生日(背包DP大作战S) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

977 AlvinZH過生日

思路

難題。逆推DP。

要明確dp的狀態(tài)只與是否有選擇權(quán)有關(guān),而與選擇權(quán)在誰手里無關(guān)。因?yàn)椴徽撨x擇權(quán)在誰手里,那個人都會盡可能的獲得最大的蛋糕重量。

dp[i]表示分配到第i個物品為止,當(dāng)前擁有選擇權(quán)的人能獲得的最大蛋糕重量,即蛋糕[i~n]的最大值。以有選擇權(quán)的的人列一個轉(zhuǎn)移方程,然而因?yàn)槲覀冎恢莱跏歼x擇的是AlvinZH,因此我們要逆推:

dp[i] = max(dp[i+1], sum - dp[i+1] + val[i]);//max(不吃, 吃)

其中sum為[i+1~n]蛋糕總質(zhì)量,最后dp[1]就是AlvinZH獲得的最大價值。

注意:

  • 注釋里的吃與不吃并不是一直針對同一個人的,指的是當(dāng)前有選擇權(quán)的人對當(dāng)前蛋糕吃與不吃。
  • 整個過程沒有管AlvinZH吃還是不吃,針對的對象是有選擇權(quán)的那個人。

分析

這道題很有意思,巧妙地避過了選擇權(quán)在誰手里的問題,dp求解的是有選擇權(quán)能獲得的最大價值,并沒有考慮誰有選擇權(quán)。

逆推也很有意思,因?yàn)橹恢篱_始時選擇權(quán)在AlvinZH手里。

好好理解吧,神奇的DP,你對它一無所知。

參考代碼一

// // Created by AlvinZH on 2017/11/5. // Copyright (c) AlvinZH. All rights reserved. //#include <cstdio> #include <cstring> #include <iostream> using namespace std;int n; int sum;//表示i+1~n塊蛋糕的總量 int val[105], dp[105];int main() {while(~scanf("%d", &n)){sum = 0;memset(dp, 0, sizeof(dp));for(int i = 1; i <= n; ++i)scanf("%d", &val[i]);for(int i = n; i >= 1; --i){dp[i] = max(dp[i + 1], sum - dp[i + 1] + val[i]);//max(不吃, 吃)。sum += val[i];}printf("%d\n", dp[1]);} }

轉(zhuǎn)載于:https://www.cnblogs.com/AlvinZH/p/7867597.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的977 AlvinZH过生日(背包DP大作战S)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。