1.一種雙核CPU的兩個核能夠同時的處理任務宝穗,現(xiàn)在有n個已知數據量的任務需要交給CPU處理炼彪,假設已知CPU的每個核1秒可以處理1kb莹规,每個核同時只能處理一項任務蹄衷。n個任務可以按照任意順序放入CPU進行處理忧额,現(xiàn)在需要設計一個方案讓CPU處理完這批任務所需的時間最少,求這個最小的時間愧口。
輸入描述:
輸入包括兩行:第一行為整數n(1 ≤ n ≤ 50)第二行為n個整數length[i](1024 ≤ length[i] ≤ 4194304)睦番,表示每個任務的長度為length[i]kb,每個數均為1024的倍數耍属。
輸出描述:
輸出一個整數托嚣,表示最少需要處理的時間
輸入例子:
53072 3072 7168 3072 1024
輸出例子:
9216
寫的時候以為是貪心 結果只對了一半 因為要趕著去上實驗課就放棄了。厚骗。示启。回來后和別人討論一下發(fā)現(xiàn)不能貪领舰。夫嗓。只能老老實實用背包zzz
代碼如下
#include <bits/stdc++.h>
using namespace std;
const int N = 111;
const int M = 555;
int num[N];
int dp[N][M];
int main()
{
int n;
scanf("%d", &n);
int total = 0;
for (int i = 0; i < n; i++) {
int m;
cin >> m;
num[i] = m / 1024;
total += num[i];
}
int target = total / 2;
memset(dp, 0, sizeof(dp));
for (int i = num[0]; i <= target; i++) dp[n-1][i] = num[0];
for (int i = 1; i < n; i++) {
for (int j = num[i]; j <= target; j++) {
dp[n-1-i][j] = max(dp[n-i][j-num[i]]+num[i], dp[n-i][j]);
}
}
cout << (total - dp[0][target]) * 1024;
return 0;
}
2.牛客網沒找到題目 就大概是個輸入一些數 去掉重復的 輸出時候按最后輸出的順序
明顯就是哈希 當時因為哈希遍歷時候寫了<1ooo應該被一個1000的數據卡了一下還慌了一下= =
#include <bits/stdc++.h>
using namespace std;
const int N = 111;
const int M = 1111;
int hashMap[M];
int sequence[N];
int main()
{
int n;
scanf("%d", &n);
memset(hashMap, -1, sizeof(hashMap));
int first = 0;
for (int i = 0; i < n; i++) {
int m;
cin >> m;
hashMap[m] = first++;
}
int flag = 0;
for (int i = 0; i < first; i++) {
for (int j = 0; j < 1001; j++) {
if (hashMap[j] == i) {
if (flag) {
cout << ' ';
}
if (flag == 0) {
flag = 1;
}
cout << j;
break;
}
}
}
return 0;
}
3.在幼兒園有n個小朋友排列為一個隊伍冲秽,從左到右一個挨著一個編號為(0~n-1)舍咖。其中有一些是男生,有一些是女生劳跃,男生用'B'表示谎仲,女生用'G'表示。小朋友們都很頑皮刨仑,當一個男生挨著的是女生的時候就會發(fā)生矛盾郑诺。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少杉武。你只能在原隊形上進行調整辙诞,每次調整只能讓相鄰的兩個小朋友交換位置,現(xiàn)在需要盡快完成隊伍調整轻抱,你需要計算出最少需要調整多少次可以讓上述情況最少飞涂。例如:GGBBG -> GGBGB -> GGGBB這樣就使之前的兩處男女相鄰變?yōu)橐惶幭噜彛枰{整隊形2次輸入描述:
輸入數據包括一個長度為n且只包含G和B的字符串.n不超過50.
輸出描述:
輸出一個整數,表示最少需要的調整隊伍的次數
輸入例子:
GGBBG
輸出例子:
2
#include <bits/stdc++.h>
using namespace std;
const int N = 11111;
const int M = 1111;
char child[N];
int main()
{
scanf("%s", child);
int n = strlen(child);
int ans1 = 0, ans2 = 0;
int girl = 0, boy = 0;
for (int i = 0; i < n; i++) {
if (child[i] == 'G') {
girl ++;
}
}
int girlTag = 0;
for (int i = 0; i < n; i++) {
if (child[i] == 'G') {
ans1 += (i - girlTag);
girlTag++;
}
}
int boyTag = 0;
for (int i = 0; i < n; i++) {
if (child[i] == 'B') {
ans2 += (i - boyTag);
boyTag++;
}
}
int ans = min(ans1, ans2);
cout << ans;
return 0;
}
希望能盡快面試吧good luck(別因為實驗課gg