兩個雞蛋100層樓(DP)

來源:互聯網
上載者:User
#include <iostream>using namespace std;#define N 500#define max(a,b) (a>b?a:b)#define min(a,b) (a<b?a:b)int dp[2][N]; /* dp[i][j] 表示用i個雞蛋測試第 j 層樓所需要的最小步數 */void count ( int n )  {int i, j;/* dp[1][i] = i 已經是最優解,是準確值。而dp[2][i] = i只是用最差解預先處理 */for ( i = 0; i <= n; i++ ) dp[1][i] = dp[2][i] = i;/* 對於每個樓層i,可以從[1,i-1]層中任選一層拋j第一個雞蛋:雞蛋可能破了,那麼必須挨個嘗試[1,j-1],即dp[1][j-1],雞蛋可能沒破,那麼處理[j+1,i],即dp[2][i-j]。每次拋都考慮最壞情況,即max(dp[1][j-1],dp[2][i-j])。枚舉所有[1,i-1]的樓層,取最優解 */for ( i = 1; i <= n; i++ )for ( j = 1; j < i; j++ )dp[2][i] = min ( dp[2][i], 1 + max(dp[1][j-1], dp[2][i-j]) ); }int main(){count(200);int n;while ( scanf("%d",&n) != EOF ){for ( int i = 1; i <= n; i++ )printf("%d %d\n",i,dp[2][i]);}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.