陜西師範第七屆K題----動態規劃
ps: 自己的方法絕對是弱爆了
肯定存在更優的方法
O(n^3)復雜度 暴力求解的。。
鏈接:https://www.nowcoder.com/acm/contest/121/K
來源:牛客網
柯怡最近開始沈迷賭博,比如跟別人賭這次陜西皇家女子學院舉辦的校賽裏面,AK人數的奇偶;
而這種賭博顯然柯怡穩賺不賠,因為她可以偷偷參加校賽,然後在最後一分鐘觀察AK的人數,如果她賭的是奇數而那時有偶數個人AK,她只要用這剩下的一分鐘自己AK一次就可以讓數量變回偶數了;
聰明的ddjing發現了老千柯怡的陰險套路,萬般無奈的柯怡只好更改賭博的套路,這次她覺得跟ddjing玩猜數字;
這個遊戲很簡單,規則是,柯怡和ddjing在遊戲開始前,先規定數字的範圍是1到n,而柯怡則從這n個數裏面選出一個x並默默記在心中,每次ddjing去猜一個數y,柯怡會告訴ddjing,他是猜大了(y>x)還是猜小了(y<x),亦或者是猜對了(y==x);
而賭註則是,每次ddjing去猜一個數y的時候,若他沒有猜中,那麽他就需要向柯怡贈送y套女裝(因為這是柯怡的最愛),如果他猜中了,那柯怡將會穿著小裙裙來到比賽現場給大家發氣球;
雖然柯怡允許每次遊戲的時候,ddjing可以猜任意次,直到猜中為止,但這顯然可以為柯怡提供出千的可能,比如說,柯怡心中所選之數是x1,而ddjing第一次就猜中了,然後柯怡就會馬上變更她心中所選之數為x2,同時告訴ddjing他猜大了還是猜小了,但柯怡不會破壞遊戲規則(比如說ddjing猜了5,柯怡告訴ddjing猜大了,那新的數就不能是小於等於5的數);
雖然ddjing知道這個遊戲有很大的出千空間,但他知道,只要付出足夠多的女裝,就能穩定贏得最後的勝利;
但ddjing手頭比較緊,他想知道,對於猜測1~n的遊戲,在柯怡不斷出千的情況下,他最少要準備多少套女裝,才能保證一定能猜到最終結果;
輸入描述:
第一行一個整數T(T<=100),代表數據組數;
對於每組數據,只有一行整數n(n<=300),代表遊戲的數字範圍;
輸出描述:
對於每組數據,輸出一個整數,代表ddjing至少需要準備的女裝數目;示例1
輸入
復制3 1 2 3
輸出
復制0 1 2
說明
當n=1時,ddjing只要猜1就能猜中,所以不用贈送女裝;當n=2時,ddjing柯怡猜1,下一次就肯定能猜中,所以只需要贈送一件女裝就好;
當n=3時,ddjing只要猜2,下一次就肯定能猜中,只需要要贈送兩件女裝就好;
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=307; 4 const int INF=0x3f3f3f3f; 5 int dp[N][N]; 6 int main () 7 { 8 for (int l=2;l<=305;l++) 9 for (int i=1;i+l<=305;i++) { 10 int j=i+l-1; 11 dp[i][j]=INF; 12 for (int k=i;k<=j;k++) { 13 int t1=0,t2=0; 14 if (k!=i) t1=dp[i][k-1]; 15 if (k!=j) t2=dp[k+1][j]; 16 int tmp=max (t1,t2)+k; 17 dp[i][j]=min (dp[i][j],tmp); 18 } 19 } 20 int T; scanf ("%d",&T); 21 while (T--) { 22 int n; scanf ("%d",&n); 23 printf("%d\n",dp[1][n]); 24 } 25 return 0; 26 }
陜西師範第七屆K題----動態規劃