稱號:
problem description
這裡有很多從磁碟讀取所需的資料。它包含順序讀取、隨機讀。為了提高效率,需要人為安排磁碟讀取。然。事實上,這種方法是非常複雜的。
我們認為乙個比較簡單的場景。
有大量的磁碟軌道。扇區,用於儲存資料。
當我們想在特定扇區來讀取資料時,磁頭須要跳轉到特定的軌道、詳細扇區進行讀取操作。
為了簡單,我們如果磁頭能夠在某個軌道順時針或逆時針勻速旋轉,旋轉一周的時間是360個單位時間。
磁頭也能夠任意移動到某個軌道進行讀取。每跳轉到乙個相鄰軌道的時間為400個單位時間,跳轉前後磁頭所在扇區位置不變。
一次讀取資料的時間為10個單位時間。讀取前後磁頭所在的扇區位置不變。磁頭同一時候僅僅能做一件事:跳轉軌道。旋轉或讀取。
如今,須要在磁碟讀取一組資料。如果每乙個軌道至多有乙個讀取請求,這個讀取的扇區是軌道上分布在 0到359內的乙個整數點扇區,即軌道的某個360等分點。磁頭的起始點在0軌道0扇區。此時沒有資料讀取。
在完畢全部讀取後,磁頭須要回到0軌道0扇區的始點位置。請問完畢給定的讀取所需的最小時間。
input
輸入的第一行包括乙個整數m(0
對於每組測試資料,第一行包括乙個整數n(0該題目是比較經典的雙調歐幾里德旅行商問題。用動態規劃來做。
#include#include#include#includeusing namespace std;
const int maxn=1000+5;
int inf=1<<29;
int dp[maxn][maxn];
int d[maxn][maxn];
int x[maxn],y[maxn];
int dist(int i,int j)
int main(){
//freopen("a.txt","r",stdin);
int n;
int kase;
cin>>kase;
while(kase--){
cin>>n;
n++;
for(int i=2;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
d[j][i]=d[i][j]=dist(i,j);
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
dp[i][j]=inf;
dp[2][3]=dp[1][3]=d[1][2]+d[2][3]+d[1][3];
for(int i=4;i<=n;i++)
for(int j=1;j
百度之星資格賽
1001 給你1 n這n個數字,公升序排列,接下來按照陣列a進行位置變換,a i 代表第i個數字會變到a i 位置上,a中的數字也是從1 n。現在問有多少個不同的陣列能滿足做一次變換和做三次變換結果相同。我們可以這樣分析,x y是唯一的到y的途徑,假設x y為第一次變換,因此在第三次變換的時候任然為...
2016 百度之星 資格賽
變懶了,最近做的很多題目都不想貼了。本來就sb,還那麼懶,沒救了。a沒想太多,設個逆元就過了。b斐波那契數列高精度。n 0時輸出換行。c字典樹,記錄結點的單詞數 以及 當前結點是否是單詞的末尾,delete時需要先找出字首對應的串數,那麼就dfs統計末尾結點總數,然後用字首減掉就好了。一開始dfs跑...
2023年百度之星程式設計大賽 資格賽
主要是卡了一下 接下來2題還在做 都有思路 考慮全然即可了 include include using namespace std int main if k 1 m v m v k m int sum 0 while m n m 0 if m 0 m n sum 1 printf d n sum ...