九度Oj題解

2021-06-20 05:52:54 字數 1969 閱讀 7448

一、動態規劃專題

1205 n階樓梯上樓問題 dp[i]表示到達i階的方法數,狀態轉移方程:dp[i] = dp[i-1]+dp[i-2],值很大要用long long.

1451 不容易系列之一 dp[i]表示總共i個數時的錯排方案數,狀態轉移方程:dp[i] = (i - 1) * dp[i-1] + (i - 2) * dp[i-2];

1420 jobdu mm分水果 01揹包變形。dp[i]表示可以達到容量為i的狀態,狀態轉移方程:if (dp[i] == true) dp[i+weight[k]] = true;(k=1,2...n),初始化:dp[0] = true,其餘皆為false

1209 最小郵票數 01揹包變形。dp[i]表示達到郵資i所需的最少的郵票數,狀態轉移方程:if (dp[i] != max) dp[i+value[k]] = min[dp[i+value[k]),dp[i]+1)(k=1,2,3..n)初始化:dp[0]=0,其餘max。

1358 陳博的平均主義 01揹包變形。將a~b之間的數i各個數字當做乙個物品,問題就轉換了,解法同1420 jobdu mm分水果。

1025 最大報銷額  01揹包變形。本題的關鍵是每張發票限額1000.00,先忽視小數點,看成100000,最多30張,那麼總限額30*100000=300w,也就是說揹包容量是300w,之後就是揹包問題了。最壞情況下需要操作30*300w=9000w次。沒錯,就是這麼操蛋,敢敲就會贏!

1030 畢業bg 01揹包+貪心。先對各個bg按結束時間非降排序,然後用揹包做。題目沒說明時間大小,一開始以為用揹包做不妥,因為考慮到揹包容量未知,但是要這作為機試的題目,若非壓軸題,肯定不難的,這個是考場上應該利用到的資訊。

1042 coincidence 裸裸的最長公共子串行

1452 搬寢室  貪心+dp。dp[i][j][0]表示在前面i個物品中搬了j對物品,第i個物品不搬動所消耗的體力,dp[i][j][1] 表示在前面i個物品中搬了j對物品,第i個物品要搬動所消耗的體力。我們要使最終消耗的體力最小,那麼乙個物品只會與重量相近的兩個物品之一一起搬走,所以先對重量排序,也就是貪心。之後就是狀態轉移方程:dp[i][j][0] = min(dp[i-1][j][1],dp[i-1][j][0]);dp[i][j][1] = min(dp[i][j][1],dp[i-1][j-1][0]+temp)。最終輸出min(dp[n][k][0],dp[n][k][1])。

1453 greedy tino dp[i][j]=true表示可以到達扁擔一邊承重i一邊承重j的狀態,dp[i][j]=false表示不可達。狀態轉移方程:if (j >=weighe[i] && dp[j-weight[i]][k] == true) dp[j][k] = true;

if (k >=weighe[i] && dp[j][k-weighe[i]] == true) dp[j][k] = true。最後選dp[j][j]=true中最大的j。

1082 **伺服器 一道亮瞎狗眼的dp。需要先轉換模型,利用map將n個**伺服器ip和m個伺服器ip對映成id,然後問題就變成為m個伺服器ip的id x匹配乙個不為x的**伺服器ip的id y,如果前後兩個y相同那麼無須切換,否則需要切換。dp[i][j]表示第i個伺服器匹配第j個**伺服器所需要的最少切換次數。狀態轉移方程:dp[i][j] = min(dp[i][j],dp[i-1][j])還有j!=k時 dp[i][j] =min(dp[i][j],dp[i-1][k]+1);

1533 最長上公升子串行 必須用複雜度o(nlogn)的解法。dp[i]表示長度為i的子串行中末尾最小的數,狀態更新必須用二分查詢。具體見**:

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

if (low > dlen)

else dp[low] = arr[i];

}

二、資料結構專題

1415 不一樣的迴圈佇列 迴圈佇列。關鍵是用乙個flag標誌head==tail時是空還是滿。

三、未解題

1256

九度OJ 時鐘

輸入 輸入包含多組測試資料,每組測試資料由乙個按hh mm表示的時刻組成。輸出 對於每組測試資料,輸出乙個浮點數,代表時針和分針的夾角 劣弧對應的角 用角度表示,結果保留兩位小數。樣例輸入 03 00 14 45 樣例輸出 90.00 172.50 arc.cpp created on 2014年1...

九度OJ 題目1018

題目1018 統計同成績學生人數 題目描述 讀入n名學生的成績,將獲得某一給定分數的學生人數輸出。輸入 測試輸入包含若干測試用例,每個測試用例的格式為 第1行 n 第2行 n名學生的成績,相鄰兩數字用乙個空格間隔。第3行 給定分數 當讀到n 0時輸入結束。其中n不超過1000,成績分數為 包含 0到...

九度OJ練習筆記

1.c 中使用stl庫,簡化 include include 排序演算法包含在此處 include using namespace std int main sort num.begin num.end 排序演算法 for int i 0 icout cout n return 0 2.排序問題 有...