結果
問題 | No.2317 Expression Menu |
ユーザー |
|
提出日時 | 2023-05-26 22:08:46 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 229 ms / 2,000 ms |
コード長 | 1,155 bytes |
コンパイル時間 | 2,919 ms |
コンパイル使用メモリ | 160,972 KB |
最終ジャッジ日時 | 2025-02-13 06:46:58 |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <utility> #include <map> #include <set> #include <queue> #include <iomanip> #include <cstring> #include <atcoder/all> using namespace std; using namespace atcoder; typedef long long ll; #define rep(i,n) for (int i = 0; i < int(n);i++) ll dp[301][301][301]; int main(){ int n,x,y; cin >> n >> x >> y; for (int i = 0; i <= n;i++){ for (int j = 0; j <= x;j++){ for (int k = 0; k <= y;k++){ dp[i][j][k] = -1; } } } vector<int> a(n); vector<int> b(n); vector<int> c(n); rep(i,n){ cin >> a[i] >> b[i] >> c[i]; } dp[0][0][0] = 0; for (int i = 0; i < n;i++){ for (int j = 0; j <= x;j++){ for (int k = 0; k <= y;k++){ if (dp[i][j][k] == -1) continue; if (j+a[i] <= x && k+b[i] <= y) dp[i+1][j+a[i]][k+b[i]] = max(dp[i][j][k]+c[i],dp[i+1][j+a[i]][k+b[i]]); dp[i+1][j][k] = max(dp[i+1][j][k],dp[i][j][k]); } } } ll ans = 0; for (int j = 0; j <= x;j++){ for (int k = 0; k <= y;k++){ ans = max(ans,dp[n][j][k]); } } cout << ans << endl; return 0; }