結果

問題 No.258 回転寿司(2)
ユーザー nanasili
提出日時 2015-08-01 00:12:34
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,654 bytes
コンパイル時間 879 ms
コンパイル使用メモリ 86,496 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-06 18:48:32
合計ジャッジ時間 3,960 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 67
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:29:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   29 |   scanf("%d", &n);
      |   ~~~~~^~~~~~~~~~
main.cpp:32:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   32 |     scanf("%d", &v[i]);
      |     ~~~~~^~~~~~~~~~~~~

ソースコード

diff #
プレゼンテーションモードにする

#include <algorithm>
#include <vector>
#include <cfloat>
#include <string>
#include <cmath>
#include <set>
#include <cstdlib>
#include <map>
#include <ctime>
#include <iomanip>
#include <functional>
#include <deque>
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <stack>
#include <climits>
#include <sys/time.h>
#include <cctype>
using namespace std;
typedef long long ll;
int main() {
int n;
scanf("%d", &n);
int v[n];
for (int i = 0; i < n; i++) {
scanf("%d", &v[i]);
}
if (n == 1) {
printf("%d\n", v[0]);
puts("1");
return 0;
}
int dp1[n][2], dp2[n][2], dp3[n][2];
memset(dp1, 0, sizeof(dp1));
memset(dp2, -1, sizeof(dp2));
memset(dp3, -1, sizeof(dp3));
dp1[0][1] = v[0];
int p, c;
p = c = 0;
for (int i = 1; i < n; i++) {
if (dp1[i][1] < dp1[i-1][0]+v[i]) {
dp1[i][1] = dp1[i-1][0]+v[i];
dp2[i][1] = i-1;
dp3[i][1] = 0;
if (dp1[p][c] < dp1[i][1]) {
p = i;
c = 1;
}
}
if (dp1[i][0] < dp1[i-1][1]) {
dp1[i][0] = dp1[i-1][1];
dp2[i][0] = i-1;
dp3[i][0] = 1;
}
if (dp1[i][0] < dp1[i-1][0]){
dp1[i][0] = dp1[i-1][0];
dp2[i][0] = i-1;
dp3[i][0] = 0;
}
if (dp1[p][c] < dp1[i][0]) {
p = i;
c = 0;
}
}
printf("%d\n", dp1[p][c]);
// printf("%d %d\n", p, c);
vector <int> ans;
while (p != -1 && c != -1) {
if (c != 0) {
// printf("%d %d\n", p, c);
ans.push_back(p+1);
}
int t = p;
p = dp2[p][c];
c = dp3[t][c];
}
for (int i = ans.size()-1; i >= 0; i--) {
printf("%d ", ans[i]);
}
puts("");
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0