1.最佳排程問題
假設有n(n<=20)個任務由k(k<=20)個可並行工作的機器完成。完成任務i需要的時間為ti。 試設計乙個演算法,對任意給定的整數n和k,以及完成任務i 需要的時間為ti ,i=1~n。計算完成這n個任務的最佳排程,使得完成全部任務的時間最早。
輸入格式:
輸入資料的第一行有2 個正整數n和k。第2 行的n個正整數是完成n個任務需要的時間。
輸出格式:
將計算出的完成全部任務的最早時間輸出到螢幕。
輸入樣例:
在這裡給出一組輸入。例如:
7 32 14 4 16 6 5 3
輸出樣例:
在這裡給出相應的輸出。例如:
17**:
#include
#include
using namespace std;
const int n = 1005;
int n,k,a[n],b[n],ans=0x7fffffff;
void dfs(int x,int tot) else
cout << 「.」;
if (j != n - 1) else }}
memset(map, 0, sizeof(map)); //還原
} else
for (int i = 0; i < n; i++) //嘗試在 cur行的 各 列 放置皇后}}
int main()
// printf("%d %d\n",sum,cnt);//輸出 解決方案 和 遞迴次數
return 0;
}3.0-1揹包問題
給定n(n<=100)種物品和乙個揹包。物品i的重量是wi,價值為vi,揹包的容量為c(c<=1000)。問:應如何選擇裝入揹包中的物品,使得裝入揹包中物品的總價值最大? 在選擇裝入揹包的物品時,對每種物品i只有兩個選擇:裝入或不裝入。不能將物品i裝入多次,也不能只裝入部分物品i。
輸入格式:
共有n+1行輸入: 第一行為n值和c值,表示n件物品和揹包容量c; 接下來的n行,每行有兩個資料,分別表示第i(1≤i≤n)件物品的重量和價值。
輸出格式:
輸出裝入揹包中物品的最大總價值。
輸入樣例:
在這裡給出一組輸入。例如:
5 10
2 62 3
6 55 4
4 6輸出樣例:
在這裡給出相應的輸出。例如:
15執行**:
#include
using namespace std;
int main();
for(int i=1;cin>>w[i]>>v[i];i++);
for(int i=1;i<=n;i++)
}cout<4.整數拆分問題
將乙個正整數拆分成若干個正整數的和。
輸入格式:
乙個正整數n
輸出格式:
若干行,每行乙個等式(每個數或者等號間都有乙個空格,第乙個數前沒有空格,最後乙個數後面沒有空格,數與數之間要求非降序排列)。最後一行給出解的總個數
輸入樣例:
在這裡給出一組輸入。例如:
4輸出樣例:
在這裡給出相應的輸出。例如:
4 = 1 + 1 + 1 + 1
4 = 1 + 1 + 2
4 = 1 + 3
4 = 2 + 2
4執行**:
#include
#include
using namespace std;
int n, num;
vector v;
void dfs(int k, int sum)
cout << endl;
num++;
return;
}for(int i = k; i < n; i++)
}int main()
5.666問題
小明有一張m*n的好習慣記錄卡,記錄每一天的好習慣目標達成度(數字0-9表示)。某天目標完成達成,就在當天的格仔裡寫上數字6,目標沒有完全達成就寫上乙個小於6的數字(0-5),目標超額完成就寫上乙個大於6的數字(7-9)。記錄卡上如果能找到一條長度為3的路徑並且路徑上的三個數字都大於等於6(這裡的路徑是指從某個格仔出發,可以向左、右、上、下格仔移動,並且不能重複經過乙個格仔),則小明就能得到乙個「666」獎勵。
請你幫小明統計下他總共能得到多少「666」獎勵。
輸入格式:
輸入第一行給出兩個正整數m,n(1=輸出格式:
先輸出m行,每行包括n個整數,代表從當前格仔出發得到的「666」獎勵個數,中間用空格分割,最後乙個數字後面不帶空格。然後再在下一行輸出得到的「666」獎勵總數。
輸入樣例:
3 36 6 7
3 8 3
7 9 5
輸出樣例:
2 1 2
0 3 0
1 1 0
10執行**
#include
using namespace std;
int resource[102][102];//輸入陣列
int result[102][102];//儲存結果的陣列
int n, m;//m行,每行n個數
int backtrack(int i,int j,int undergoing,int direction)
else
}
if (resource[i+1][j] >= 6 && direction != 4)
else
}if (resource[i][j - 1] >= 6 && direction != 1)
else
}if (resource[i-1][j] >= 6 && direction != 2)
else
}if (undergoing == 2)
else
int main()
}for (int i = 1; i <= m; i++)
}for (int i = 1; i <= m; i++)
sum += result[i][j];
}cout << endl;
}cout << sum << endl;
return 0;
}6.工作分配問題
設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 。 設計乙個演算法,對於給定的工作費用,為每乙個人都分配1 件不同的工作,並使總費用達到最小。
輸入格式:
輸入資料的第一行有1 個正整數n (1≤n≤20)。接下來的n行,每行n個數,表示工作費用。
輸出格式:
將計算出的最小總費用輸出到螢幕。
輸入樣例:
在這裡給出一組輸入。例如:
310 2 3
2 3 4
3 4 5
輸出樣例:
在這裡給出相應的輸出。例如:
9執行**:
#include
#include
#include
using namespace std;
int a[100][100],sum,minn,i,j,n;
bool b[100];
void dfs(int dep)
PTA練習題 旅遊規劃
有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入格式 輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 50...
演算法練習題
題目描述 給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前...
PTA練習題 樹的同構
在網上做了一道簡單的練習題,判斷兩棵樹是否同構 題目描述 給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。輸入格式 輸入給出2棵...