多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > zoj 2059 - The Twin Towers

zoj 2059 - The Twin Towers

來源:程序員人生   發布時間:2014-10-03 08:00:00 閱讀次數:1927次

題目:給你一些磚塊,問你是否能羅列成2個高度相同的塔,每層一個石頭。

分析:dp,雙塔問題。和LIS,背包等問題相同,前 i項的最優子問題。 

            狀態:f(i,j)為前 i個材料,在兩塔差的絕對值為j時的高塔(或者低塔)的高度;

            決策:每次有 3種選擇:放在高塔上,放在低塔上,或者不放;

            T = O( sum( h )*n ) { 階段數*長度總和/2 }。

說明:為了減小內存用輔助數組作為滾動數組使用。 

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define max( a, b ) ((a)>(b)?(a):(b)) int f[ 1001 ]; int t[ 1001 ]; int h[ 101 ]; int main() { int n,s; while ( scanf("%d",&n) != EOF && n != -1 ) { s = 0; for ( int i = 1 ; i <= n ; ++ i ) { scanf("%d",&h[ i ]); s += h[ i ]; } s /= 2; memset( f, 0, sizeof( f ) ); memset( t, 0, sizeof( t ) ); for ( int i = 1 ; i <= n ; ++ i ) { for ( int j = 0 ; j <= s ; ++ j ) if ( t[ j ] ) { f[ j+h[ i ] ] = max( t[ j ]+h[ i ], f[ j+h[ i ] ] ); f[ abs(h[ i ]-j) ] = max( max( t[ j ], t[ j ]+h[ i ]-j ), f[ abs(h[ i ]-j) ] ); } f[ h[ i ] ] = max( h[ i ], f[ h[ i ] ] ); for ( int j = 0 ; j <= s ; ++ j ) f[ j ] = max( f[ j ], t[ j ] ); for ( int j = 0 ; j <= s ; ++ j ) t[ j ] = f[ j ]; } if ( f[ 0 ] ) printf("%d ",f[ 0 ]); else printf("Sorry "); } return 0; }

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产免费私拍一区二区三区 | 国产在线伊人 | 欧美片第一页 | 久久aa | 久久久综合久久 | 欧美精品网 | 99re这里有免费视频精品 | 老司机午夜视频在线观看 | 欧美精品一区二区三区四区 | 中文在线免费视频 | 欧美日韩精品免费一区二区三区 | 大焦伊人| 一级女人毛片 | 亚洲综合综合在线 | 亚洲人成在线播放网站 | 国产美女视频一区二区二三区 | 亚洲欧美日韩久久一区 | 亚洲伦理网站 | 久久免费观看国产精品 | 99国产精品久久久久久久成人热 | 欧美色图偷窥自拍 | www羞羞动漫网在线观看 | 欧美高清正版在线 | 久久免费国产精品一区二区 | 欧美日本在线观看 | 国产成年网站v片在线观看 国产成人 免费观看 | 午夜在线免费视频 | 性色va| 亚洲最大免费视频网 | 国产欧美国产精品第二区 | 欧美日韩在线播放成人 | 亚洲区精品久久一区二区三区 | 范冰冰一级做a爰片久久毛片 | 国产日韩久久 | 亚洲小说春色综合另类网蜜桃 | 一二三四视频免费观看高清版在线 | 伊人影院2019 | 99黄色片| 亚州天堂网 | 一二三四在线观看免费播放视频 | 日韩欧美自拍 |