提出 #7569025
ソースコード 拡げる
#include <bits/stdc++.h>
#define REP(i,s,e) for(int i=(s); i<(e);i++)
#define rep(i,n) REP(i,0,n)
#define rep1(i,n) REP(i,1,n)
#define repe(i,n) for(auto &&i:n)
#define all(v) (v).begin(),(v).end()
#define decimal fixed<<setprecision(20)
#define fastcin() cin.tie(0);ios::sync_with_stdio(false)
using namespace std;
using LL = long long;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
const int INF = 1e9;
const LL LLINF = 1e16;
// i日目に活動jをしたとき、それまでに得られる幸福度の最大値
int dp[100010][3];
int a[101010][3];
int main(){
int N;
cin >> N;
// ループで回せる形で幸福度を持つ
for(int i=0; i<N; i++)for(int j=0; j<3; j++) cin >> a[i][j];
for(int j=0; j<3; j++) dp[0][j] = 0;
for(int i=0; i<N; i++){
for(int j=0; j<3; j++)for(int k=0; k<3; k++){
if(j == k) continue; // 前日と同じ活動はしない
// i+1日目に活動kをする
// aは0-indexedに対し、dpテーブルは1-indexedで日付を持っているのに留意
dp[i+1][k] = max(dp[i+1][k], dp[i][j]+a[i][k]);
}
}
int ans = 0;
for(int j=0; j<3; j++) ans = max(ans, dp[N][j]);
cout << ans << endl;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | C - Vacation |
| ユーザ | AokabiC |
| 言語 | C++14 (GCC 5.4.1) |
| 得点 | 100 |
| コード長 | 1405 Byte |
| 結果 | AC |
| 実行時間 | 110 ms |
| メモリ | 2560 KiB |
ジャッジ結果
| セット名 | All | ||
|---|---|---|---|
| 得点 / 配点 | 100 / 100 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| All | 0_00, 0_01, 0_02, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 0_00 | AC | 1 ms | 256 KiB |
| 0_01 | AC | 1 ms | 256 KiB |
| 0_02 | AC | 1 ms | 256 KiB |
| 1_00 | AC | 1 ms | 256 KiB |
| 1_01 | AC | 110 ms | 2560 KiB |
| 1_02 | AC | 94 ms | 2560 KiB |
| 1_03 | AC | 93 ms | 2560 KiB |
| 1_04 | AC | 92 ms | 2560 KiB |
| 1_05 | AC | 92 ms | 2560 KiB |
| 1_06 | AC | 92 ms | 2560 KiB |
| 1_07 | AC | 92 ms | 2560 KiB |
| 1_08 | AC | 91 ms | 2560 KiB |
| 1_09 | AC | 92 ms | 2560 KiB |