結果
問題 | No.2093 Shio Ramen |
ユーザー | mnm |
提出日時 | 2022-10-07 23:10:41 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 8 ms / 2,000 ms |
コード長 | 1,603 bytes |
コンパイル時間 | 1,229 ms |
コンパイル使用メモリ | 102,524 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-12 20:58:52 |
合計ジャッジ時間 | 2,407 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 30 |
ソースコード
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <cmath> #include <tuple> #include <bitset> #include <map> #include <set> #include <queue> #include <iomanip> #define rep(i,n) for(i=0; i<n; ++i) #define inc_rep(i,a,n) for(i=a; i<=n; ++i) #define dec_rep(i,n,a) for(i=n; i>=a; --i) #define in(a) cin >> a #define out(a,b) cout << a << b #define print_vec(v) for(auto it=v.begin();it!=v.end();++it)cout<<*it <<" ";cout<<endl #define print_vec2d(v) for(int i=0;i<v.size();++i){for(int j=0;j<v[i].size();++j)cout<<v[i][j]<<" ";cout<<endl;}cout<<endl using namespace std; using lint = long long; void func(vector<bool> &v, vector<lint> &d, int j, int si, int ai, int m){ if(d[j]==0) return; if(j+si>m) return; if(v[j]) return; if(d[j+si]>d[j]+ai) return; else{ func(v, d, j+si, si, ai, m); d[j+si]=d[j]+ai; v[j+si]=true; } return; } int main(void){ int i, j; lint k, cnt=0, x, y; lint p, q, n, m; string s; in(n);in(m); vector<pair<lint, lint> > v(n); rep(i,n){ lint a, b; in(a);in(b); v[i]=make_pair(a, b); } vector<lint> d(m+1, 0); rep(i, n){ // print_vec(d); lint si, ai; tie(si, ai) = v[i]; if(si<=m){ vector<bool> f(m+1, false); rep(j,m+1){ func(f, d, j, si, ai, m); } if(d[si]<ai){ d[si]=ai; f[si]=true; } } } out(*max_element(d.begin(), d.end()),endl); // print_vec(d); return 0; }