結果
問題 | No.818 Dinner time |
ユーザー |
![]() |
提出日時 | 2019-04-20 14:50:08 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 70 ms / 2,000 ms |
コード長 | 1,552 bytes |
コンパイル時間 | 1,731 ms |
コンパイル使用メモリ | 173,196 KB |
実行使用メモリ | 12,096 KB |
最終ジャッジ日時 | 2024-11-29 23:38:10 |
合計ジャッジ時間 | 3,592 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 29 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define REP(i,a,n) for(int i=(a); i<(int)(n); i++) #define rep(i,n) REP(i,0,n) #define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it) #define ALLOF(c) (c).begin(), (c).end() typedef long long ll; typedef unsigned long long ull; static const ll INF = (ll)(1e16); ll dp[100005][5]; int main(){ int N, M; cin >> N >> M; vector<vector<ll>> v; rep(i,N){ ll A, B; cin >> A >> B; v.push_back({A,B}); } REP(i,1,N+1){ rep(j,3){ dp[i][j] = -INF; } } rep(i,N){ rep(j,3){ ll base = dp[i][j]; {//k==0 if(i==1){ //1つ目の鳥は必ずM回使う if(j>=2) dp[i+1][0] = max(dp[i+1][0], base); }else{ dp[i+1][0] = max(dp[i+1][0], base); } } {//k==1 if(i==1){ //1つ目の鳥は必ずM回使う if(j>=2){ dp[i+1][1] = max(dp[i+1][1], base + v[i][0]); dp[i+1][1] = max(dp[i+1][1], base + v[i][1]); } }else{ if(j>=1){ dp[i+1][1] = max(dp[i+1][1], base + v[i][0]); dp[i+1][1] = max(dp[i+1][1], base + v[i][1]); } } } {//k==M if(j>=2){ dp[i+1][2] = max(dp[i+1][2], base + M * v[i][0]); dp[i+1][2] = max(dp[i+1][2], base + (M-1) * v[i][0] + v[i][1]); dp[i+1][2] = max(dp[i+1][2], base + v[i][1]); } } } } ll ret = max(max(dp[N][0], dp[N][1]), dp[N][2]); cout << ret << endl; return 0; }