結果
問題 |
No.45 回転寿司
|
ユーザー |
![]() |
提出日時 | 2017-03-01 01:36:22 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 1,298 bytes |
コンパイル時間 | 820 ms |
コンパイル使用メモリ | 78,268 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-27 16:06:37 |
合計ジャッジ時間 | 1,995 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 30 |
ソースコード
#include <algorithm> #include <cstdio> #include <iostream> #include <map> #include <cmath> #include <queue> #include <set> #include <sstream> #include <stack> #include <string> #include <vector> #include <stdlib.h> #include <stdio.h> #include <bitset> using namespace std; #define ll long long #define PI acos(-1.0) #define FOR(I,A,B) for(int I = (A); I < (B); ++I) //方針 //N<=10^3なので使うor使わないの全探索はO(2^N)なので無理 //動的計画法を用いる //dp[N+1][use] //N個目まで調べた時Nを使った時の美味しさの和最大とNを使ってない時の最大 int main(){ int N; cin >> N; //dp int dp[N+1][2]; FOR(i, 0, N+1) FOR(j, 0, 2) dp[i][j] = -1; dp[0][0] = 0; //動的計画法 FOR(i, 0, N){ int v; cin >> v; //実際はif必要ない //一個前が使用していないなら使ってもいいし使わなくてもいい if(dp[i][0]>=0){ dp[i+1][0] = max(dp[i+1][0], dp[i][0]); dp[i+1][1] = max(dp[i+1][1], dp[i][0] + v); } //一個前が使用してたら次使用しない if(dp[i][1]>=0){ dp[i+1][0] = max(dp[i+1][0], dp[i][1]); } } cout << max(dp[N][0], dp[N][1]) << endl; }