幼い頃からC++を学びましょう!CSP-J 試験準備の学習プロセスにおける質問を記録し、あらゆる瞬間を記録します。
まとめ記事を添付します: CSP-J準決勝スプリント必須回答問題 | まとめ_プログラミング大好きコミュニケーターのブログ - CSDN Blog
[タイトル説明]
シャオウェイは突然スーパーパワーを手に入れ、 未来のT 日 のN種類のお土産の値段を知ることができた 。あるお土産の価格とは、そのお土産を購入するのに必要な金貨の枚数と、そのお土産を売るのに交換できる金貨の枚数を指します。
Xiaowei は毎日、次の 2 種類のトランザクションを無制限に実行できます。
- 任意のお土産を選択し、十分な金貨がある場合は、その日の価格でお土産を購入します。
- 持っているお土産を売って、その日の値段で金貨と交換しましょう。
毎日お土産販売用に交換した金貨はすぐにお土産の購入に使用でき、同日購入したお土産もその日のうちに金貨として売却できます。もちろん、お土産はずっと保管しておいても大丈夫です。
T 日後、Xiaowei の超能力は消えました。したがって、彼は T日に必ずすべてのお土産を金貨と交換して 売ります。
シャオウェイは現在 M 枚の 金貨を持っており、超能力が消えた後はできるだけ多くの金貨を持ちたいと考えています。
【入力】
最初の行には 3 つの正の整数 T、N、Mが含まれています。隣接する 2 つの数字はスペースで区切られており、それぞれ将来の日数 T、お土産の数 N、Xiaowei が現在所有している金貨の数 Mを表しています。 。
次に、 T 行です。各行には N 個 の正の整数が含まれており、隣接する 2 つの数値はスペースで区切られています。i 番目の行 の N 個の正の整数 は、 Pi、1、Pi、2、...、Pi、Nです。ここで、 Pi、jは、i日 目 のj 番目のお土産の価格を 表します 。
【出力】
出力は正の整数を含む 1 行のみで、Xiaowei のスーパーパワーが消えた後に保持できる金貨の最大数を示します。
【入力サンプル】
6 1 100
50
20
25
20
25
50
【出力サンプル】
305
【詳しいコード説明】
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t, n, m;
cin >> t >> n >> m;
int a[t][n];
for (int i=0; i<t; i++) {
for (int j=0; j<n; j++) {
cin >> a[i][j];
}
}
//数据处理
for (int i=1; i<t; i++) { //天数
int b[m+1];
for (int l=0; l<m+1; l++) {
b[l] = 0;
}
for (int j=0; j<n; j++) { //物品
for (int k=a[i-1][j]; k<=m; k++) { //本金
b[k] = max(b[k], b[k-a[i-1][j]]+a[i][j]-a[i-1][j]); //赚到的钱
}
}
m += b[m]; //加上赚到的价值
// cout << "m: " << m << endl;
}
cout << m;
return 0;
}
【運用結果】
6 1 100
50
20
25
20
25
50
305