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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

小木棍(洛谷-P1120)

發布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小木棍(洛谷-P1120) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過5050。

現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。

給出每段小木棍的長度,編程幫他找出原始木棍的最小可能長度。

輸入輸出格式

輸入格式:

共二行。

第一行為一個單獨的整數N表示砍過以后的小木棍的總數,其中N≤65N≤65

(管理員注:要把超過5050的長度自覺過濾掉,坑了很多人了!)

第二行為NN個用空個隔開的正整數,表示NN根小木棍的長度。

輸出格式:

一個數,表示要求的原始木棍的最小可能長度

輸入輸出樣例

輸入樣例#1:

9
5 2 1 5 2 1 5 2 1

輸出樣例#1:?

6

思路:dfs,由于數據加強需要進行剪枝,具體剪枝步驟見代碼

源代碼

#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<bitset> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long const int MOD = 1E9+7; const int N = 1000+5; const int dx[] = {-1,1,0,0,-1,-1,1,1}; const int dy[] = {0,0,-1,1,-1,1,-1,1}; using namespace std; int a[N]; bool vis[N]; int cnt; bool cmp(int x,int y){return x>y; } bool dfs(int k,int step,int rest,int len){//k為已經拼接好的個數,step為上一個的編號,rest為剩余的長度,len為木棍的長度if(k==cnt+1 && rest==0)//拼接好個數為要求數且無剩余return true;else if(k==cnt+1)//拼接好個數為要求數但有剩余return false;else if(rest==0){//拼接好個數不為要求數但無剩余,重新開始rest=len;//剩余數變為長度step=0;//編號歸零}for(int i=step+1;i<=cnt;i++){if(!vis[i]){if(rest-a[i]>=0){//保證剩余值不為負數vis[i]=true;if(dfs(k+1,i,rest-a[i],len))return true;vis[i]=false;if(a[i]==rest || len==rest)//頭尾剪枝,此時已在回溯之后,需要判斷頭尾兩種情況break;while(a[i]==a[i+1])//去重剪枝,用當前長度搜索無結果時,對同樣長度的可以忽略i++;}}}return 0; } int main(){int n;scanf("%d",&n);int sum=0;for(int i=1;i<=n;i++){int x;scanf("%d",&x);if(x<=50){a[++cnt]=x;sum+=x;}}sort(a+1,a+1+cnt,cmp);for(int i=a[1];i<=sum;i++){if(sum%i==0){if(dfs(1,0,i,i)){printf("%d\n",i);break;}}}return 0; }

?

總結

以上是生活随笔為你收集整理的小木棍(洛谷-P1120)的全部內容,希望文章能夠幫你解決所遇到的問題。

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