牛客網 D YB要打爐石 最大上公升子串行

2021-08-15 05:44:07 字數 1505 閱讀 4875

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

wozuinb非常喜歡打爐石傳說,但是菜的不行,所以他決定打

競技場來練練手。系統按順序給出n張卡牌,每張卡牌都有自

己的使用消耗a[i],每次只給出一張,wozuinb可以選擇或者

棄掉這張牌。每選擇一張牌都會按選擇順序放在卡槽中,當

卡槽中放滿30張即可組成一套套牌。wozuinb希望自己的套牌的

消耗滿足乙個平滑的曲線,即30張卡牌都滿足第i張卡牌的消耗

不小於第i-1張(i>1)。請你幫助wozuinb看一看,這些卡牌能不

能組成想要的套牌,如果能組成輸出「yes」,如果不能輸出「no」。

第一行輸入乙個整數n,0輸出一行,「yes」或「no」

這道題目就是求最大上公升子串行長度,不過可以大於等於, 非遞減即可

#include #include using namespace std ;

int dp[101] , a[101] , n ;

int main()

for( int i = 2 ; i <= n ; ++i )

for( int j = 1 ; j < i ; ++j )

if( a[i] >= a[j] )

dp[i] = max( dp[i] , dp[j] + 1 ) ;

int ans = dp[1] ;

for( int i = 2 ; i <= n ; ++i )

ans = max( ans , dp[i] ) ;

printf( ans >= 30 ? "yes\n" : "no\n" ) ;

return 0 ;

}

因為題目資料很小,長度才 100,以上的時間複雜度是 o(n^2)的。

求最大上公升子串行還有一種o(nlogn)的解法,利用到了二分搜尋。

#include #include using namespace std ;  

int a[101] ;

int package[101] , top ;

int lcs( int *a , int n )

package[l] = a[i] ; // 將 更大的數字替換成更小的數字,增加了上公升子串行擴張的可能性

} // 保證未來的上公升子串行 >= 原來的

} return top ; // 返回最大上公升子串行長度 複雜度 o(nlogn)

}

int main()

printf( lcs( a , n ) >= 30 ? "yes\n" : "no\n" ) ;

return 0 ;

}

牛客網 連續子陣列的最大和

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...

牛客網 連續子陣列的最大和

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...

牛客網 連續子陣列的最大和

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...