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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

所谓的二维背包Triangular Pastures POJ 1948

發布時間:2024/6/14 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 所谓的二维背包Triangular Pastures POJ 1948 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這題WA了很多遍,要不就是測試數據 3 1 2 3 輸出173,要不就是6 5 5 5 5 5 5? 輸出-1.甚至有時候把程序改的題目上的測試數據都過不了,各種悲摧,其實我喜歡邊寫程序邊想,這是個很差的習慣,我一定要改!!!這題是看別人的提示寫出來的,首先設bool型數組f,令 f[i][j]表示一邊長為i,另一邊長為j的邊可以組合出來,然后在所有可以組合出來的情形中找能組合成三角形且面積最大的。f[i][j]能組合出來的條件是對于加入新邊li來說是f[i-li][j] 或f[i][j-li]能組合出來,初始條件是f[0][0]能組合出來。因為題目中說了要用掉所有的欄桿,所以我只考慮兩條邊,剩下的一條邊用總長剪這兩條邊的長就知道了,然后為了這兩天邊的列舉有對稱性,可假設i>= j也算是減少運算量吧。能組成三角形的條件是任意兩邊之和大于第三邊,我令第一條邊長i <= (總長-1)/2(稍微想一下就知道了,分奇偶討論一下)第二條邊長<= i且和 i一起滿足2*(i+j) > 總長,這樣的三條邊就一定是能組成三角形的了``````

View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 bool f[900][900]; 5 int main() 6 { 7 int n,l[50]; 8 int sum =0; 9 scanf("%d",&n); 10 for(int i=0; i< n; i++) 11 { 12 scanf("%d",&l[i]); 13 sum += l[i]; 14 } 15 int m1; 16 m1=(sum-1)/2; 17 memset(f,false,sizeof(f)); 18 f[0][0] = true; 19 for(int i=0; i< n; i++) 20 { 21 for(int j = m1; j >= 0; j--) 22 { 23 for(int k = j; k>=0; k--) 24 { 25 if((j>=l[i] &&f[j-l[i]][k]) || (k >= l[i] && f[j][k - l[i]])) 26 f[j][k] = true; 27 } 28 } 29 } 30 double max = 0; 31 bool flag= false; 32 for(int j=m1; j>0; j--) 33 { 34 for(int k = j; 2*(j+k) > sum; k--) 35 { 36 double t=(sum-2*j)*(sum-2*k)*(2*(j+k)-sum)/8.0; 37 if(f[j][k] && t> max) 38 { 39 flag =true; 40 max = t; 41 } 42 } 43 } 44 if(!flag) 45 printf("-1\n"); 46 else 47 { 48 max = sum/2.0*max; 49 int d = (floor)(sqrt(max)*100); 50 printf("%d\n",d); 51 } 52 return 0; 53 }

?

?

轉載于:https://www.cnblogs.com/allh123/archive/2013/03/27/2985260.html

總結

以上是生活随笔為你收集整理的所谓的二维背包Triangular Pastures POJ 1948的全部內容,希望文章能夠幫你解決所遇到的問題。

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