貪心演算法求跑完整個接力賽最少時間

2021-07-24 14:00:47 字數 1434 閱讀 5828

有n個人參加乙個馬拉松接力遊戲,遊戲規定每個人可以根據自己的情況隨時終止遊戲並由下乙個人繼續接力。由於每個人的情況不同,即使同乙個人也不可能在整個遊戲過程中永遠保持很好的狀態。因此要求他們在比賽前根據每個人的情況需要制定乙個接力規則,使整個比賽的時間越少越好。請編寫程式幫助他們制定這樣的接力方案。

輸入要求:輸入的第1行有三個整數n,k和m,分別表示參加接力的人的個數,每個人最多可以跑的公里數以及接力賽的距離(以公里為單位)。其後的n行,每行有k個整數,分別表示每個人跑整數1公里,2公里,….,k公里所花費的時間(以秒為單位,整數)。遊戲要求每個人都必須參加比賽,且每次只能跑到整數公里後才能換人。

輸出要求:輸出1個整數,表示這些人跑完整個接力賽最少要花多少時間。

例如: 輸入

3 2 4

1 22 3

3 4輸出 5

此題用到貪心思想,先將里程m分解為若干整數的和,這裡用到dfs深度搜尋的方法,csdn上有很多參考**,然後將滿足條件(每個整數

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define fur(i,a,b) for(int i=(a);i<=(b);i++)

#define furr(i,a,b) for(int i=(a);i>=(b);i--)

#define cl(a,b) memset((a),b,sizeof(a))

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pair pii;

const int inf=0x3f3f3f3f;

const double eps=1e-8;

const int mod=1000000007;

const double pi=acos(-1.0);

const int n = 1000;

int s[n] = ;

int top;

int sum;

int n,k,m;

int time_[n][n] = ;

int min_t;

void dfs(int x)//先用dfs求出所有可能的加數

if (temp < min_t)

min_t = temp;

return;

} if (sum>m)return;

for (i = 1; i <= m; i++)//從1開始實現所有順序 }

void mintimesolute()

int main()

return 0;

}

python貪心演算法求刪數問題 演算法 貪心演算法

概念 介紹 貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,演算法得到的是在某種意義上的區域性最優解。所以說只有證明區域性最優解在全域性最優解序列中,才能通過貪心演算法得到問題的全域性最優解。也就是說選擇的貪心策略必須具備無後效性,即某個狀態以後的過...

python貪心演算法求刪數問題 貪心演算法 刪數問題

給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新 的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最 小的刪數方案。輸入格式 第 1 行是1 個正整數 a。第 2 行是正整數k。輸出格式 輸出最小數。輸入樣例 在這裡給出一組輸入。例如...

python貪心演算法求刪數問題 貪心演算法 刪數問題

給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新的正整數。對於給定的n位正整數a 和正整數k,設計乙個演算法找出剩下數字組成的新數最小的刪數方案。演算法的原理應該是說從最高位開始,一次向低位搜尋,一旦遇到前一位 高位 的數大於當前位,則刪去前一位,直到刪除k個數,如果...