時間限制: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個開始,到第...