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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ 3628 Bookshelf 2

發布時間:2025/7/14 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 3628 Bookshelf 2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

POJ 3628 Bookshelf 2:http://poj.org/problem?id=3628

題意:有個書架,高度為B,現在FJ有N個奶牛,每個奶牛有個高度hi,現在將奶牛堆起來,使得堆起來的高度大于等于B,現在要求最小高度差。

思路一: 01背包:把奶牛的高度總和減去B,就是這個背包的容量,填充它,求出的最大值與背包的容量做差,結果就是他了。

CODE:

1 #include<stdio.h> 2 #include<string.h> 3 int w[100],f[20000000]; 4 int max(int a,int b) 5 { 6 return a>b?a:b; 7 } 8 int main() 9 { 10 int n,b,i,j; 11 int sum=0; 12 while(scanf("%d%d",&n,&b)!=EOF) 13 { 14 for(i=0;i<=n;i++) 15 f[i]=0; 16 sum=0; 17 for(i=0; i<n; i++) 18 { 19 scanf("%d",&w[i]); 20 sum+=w[i]; 21 } 22 int k=sum-b; 23 for(i=0; i<n; i++) 24 { 25 for(j=k; j>=w[i]; j--) 26 { 27 f[j]=max(f[j],f[j-w[i]]+w[i]); 28 } 29 } 30 printf("%d\n",k-f[k]); 31 } 32 return 0; 33 }

思路二:DFS:(轉)

1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 using namespace std; 6 #define maxn 25 7 int n, m; 8 int f[maxn], s[maxn]; 9 int ans; 10 void dfs(int cow, int sum) 11 { 12 if (ans == 0) 13 return; 14 if (s[cow] + sum < m) 15 return; 16 if (sum >= m) 17 { 18 ans = min(ans, sum - m); 19 return; 20 } 21 if (cow == n) 22 return; 23 dfs(cow + 1, sum); 24 dfs(cow + 1, sum + f[cow]); 25 } 26 int main() 27 { 28 scanf("%d%d", &n, &m); 29 for (int i = 0; i < n; i++) 30 scanf("%d", &f[i]); 31 s[n] = 0; 32 for (int i = n - 1; i >= 0; i--) 33 s[i] = s[i + 1] + f[i]; 34 ans = 0x3f3f3f3f; 35 dfs(0,0); 36 printf("%d\n", ans); 37 return 0; 38 }

?

轉載于:https://www.cnblogs.com/PJQOOO/p/3909285.html

總結

以上是生活随笔為你收集整理的POJ 3628 Bookshelf 2的全部內容,希望文章能夠幫你解決所遇到的問題。

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