題目涉及演算法:
這道題目就是一道簡單的結構體排序。
實現**如下:
#include using namespace std;
const int maxn = 330;
struct student a[maxn];
int n;
bool cmp(student a, student b)
int main()
sort(a, a+n, cmp);
for (int i = 0; i < 5; i ++)
cout << a[i].id << " " << a[i].x+a[i].y+a[i].z << endl;
return 0;
}
本體涉及演算法:貪心。
我們從小到大遍歷每個元素(將這個元素作為較小的元素),找到最大的那個與其相加的不超過w的那件物品湊成一對;剩下的就單獨作為一件。使用雙指標法實現。
實現**如下:
#include using namespace std;
const int maxn = 30030;
int w, n, a[maxn], cnt;
int main()
else
}if (i == j) cnt ++;
cout << cnt << endl;
return 0;
}
本題主要涉及演算法:動態規劃。
我們需要知道的是:一開始如果給我的魔法值 \(\ge 10\) ,那麼無論如何我都會優先選擇使用魔法。
所以一開始就是迴圈使用貪心直到我的剩餘魔法值 \(\lt 10\) 為止。
那麼在這種情況下,我只有三種策略走下一步:
所以,如果我設 \(f[i][j]\) 表示當前在第i秒結束時,我剩餘的魔法值有j點的情況下,我行走的最大距離。則, \(f[i][j]\) 應該是如下三者的最大值:
實現**如下:
#include using namespace std;
const int maxn = 300030;
int m, s, t, f[maxn][14];
int main()
}if (id > t)
f[id][m] = s;
for (int i = id+1; i <= t; i ++) }}
puts("no");
s = 0;
for (int i = 0; i <= 13; i ++) s = max(s, f[t][i]);
cout << s << endl;
return 0;
}
這道題目相信做過遞迴經典問題——漢諾塔問題——的同學應該都能夠直接推導出遞推公式。
hanoi它問題的遞推公式是:\(f[i] = 2 \times f[i-1] + 1\) ;
而我們這裡也能夠很輕鬆推導出雙塔問題的地推公式就是:
\(f[i] = 2 \times f[i-1] + 2\)
但是因為資料量比較大,所以需要使用高精度。
實現**如下:
#include using namespace std;
const int maxn = 100010;
int a[maxn], b[maxn], c[maxn], n, t;
void init()
void solve()
if (a[n]) n ++;
}int main()
NOIP普及組複賽題集
題目描述 牛倌被通知,他的乙隻牛逃逸了!所以他決定,馬上出發,盡快把那只牛抓回來 他們都站在數軸上 牛倌在n 0 n 100000 處,牛在k 0 k 100000 處 約翰有兩種辦法移動,步行和瞬移 步行每秒種可以讓約翰從x處走到x l或x l處 而瞬移則可讓他在1秒內從x處消失,在2x處出現 然...
2023年NOIP普及組複賽題解
題目涉及演算法 入門題,直接開乙個迴圈遍歷一下就可以了。實現 如下 include using namespace std int n,ans 0 int main cout ans endl return 0 基礎題,直接遍歷一下地圖 對於每個格仔,統計一下周圍8個格仔 就可以實現地雷的統計。實現...
2023年NOIP普及組複賽題解
題目涉及演算法 這道題目是一道基礎的模擬題,只需要模擬將數字進行翻轉就可以了,注意 0 和 負數。實現 如下 include using namespace std void solve int num if num 0 int t 0 while num 0 cout t endl int n i...