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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[蓝桥杯][算法提高]和谐宿舍2(记忆化搜索)

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [蓝桥杯][算法提高]和谐宿舍2(记忆化搜索) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述
  我的某室友學過素描,墻上有n張他的作品。這些作品都是寬度為1,高度不定的矩形,從左到右排成一排,且底邊在同一水平線上。
  宿舍評比就要來了,為了及格,我們決定買不多于m塊的矩形木板,把這些作品和諧掉。要求木板也從左到右排成一排,且底邊與作品的底邊在同一水平線上。
  在能夠把所有作品和諧掉的前提下,我們希望這些木板的面積和最小,問最小面積和。

輸入格式
  第一行兩個數n和m,表示作品數和木板數;
  第二行n個數Hi,表示從左到右第i個作品的高度。
輸出格式
  一行一個數ans,表示答案。
樣例輸入
5 2
4 2 3 5 4
樣例輸出
22
數據規模和約定
  對于30%的數據:1<=n,m<=10;
  對于100%的數據:1<=n,m<=100,1<=Hi<=10000。
思路:挺明顯的動態規劃。dp[l][r][num]數組代表由第l塊木板到第r塊畫,用num塊木板遮蓋所需要的最小面積。
狀態轉移方程:

dp[l][r][num]=min(dp[l][r][num],(i-l+1)*H+dfs(i+1,r,num-1));

需要加幾個剪枝的條件否則會超時:
①如果dp[l][r][num]出現過,就可以直接返回。
②如果num變為負數,這就說明l-r用num塊木板不夠,就直接返回inf
③如果說r-l+1<num,說明這些木板多余了,那么只用r-l+1塊就可以了。
④如果說l>r了但是num還沒有用完的話,這樣肯定不是最優的。為什么呢?極限思想,我們可以將每一幅畫都用一塊木板和諧,這樣應該是最小的。num還不為0,說明前面那種方法一定可以。這樣的話,就說明之前那種辦法不是最優的。
代碼如下:

#include<bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std;const int maxx=1e2+10; int dp[maxx][maxx][maxx]; int h[maxx]; int n,m;inline int dfs(int l,int r,int num) {if(num>r-l+1) return dfs(l,r,r-l+1);if(l>r&&num) return inf;if(l>r&&num==0) return 0;if(num<0) return inf;if(dp[l][r][num]!=inf) return dp[l][r][num];int H=0;for(int i=l;i<=r;i++){H=max(H,h[i]);dp[l][r][num]=min(dp[l][r][num],(i-l+1)*H+dfs(i+1,r,num-1));}return dp[l][r][num]; } int main() {scanf("%d%d",&n,&m);memset(dp,inf,sizeof(dp));for(int i=1;i<=n;i++) scanf("%d",&h[i]);printf("%d\n",dfs(1,n,m));return 0; }

努力加油a啊,(o)/~

總結

以上是生活随笔為你收集整理的[蓝桥杯][算法提高]和谐宿舍2(记忆化搜索)的全部內容,希望文章能夠幫你解決所遇到的問題。

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