結果

問題 No.258 回転寿司(2)
ユーザー vjudge1
提出日時 2025-10-05 10:12:38
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
RE  
実行時間 -
コード長 1,052 bytes
コンパイル時間 3,326 ms
コンパイル使用メモリ 286,340 KB
実行使用メモリ 7,720 KB
最終ジャッジ日時 2025-10-05 10:12:46
合計ジャッジ時間 7,484 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3 RE * 1
other AC * 67
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[1005];
signed main(){
	int n;
	cin>>n;
	int v[n+1];
	for(int i=1;i<=n;i++)cin>>v[i];
	dp[1]=v[1],dp[2]=v[2];
	vector<int> ans[n+1];
	ans[1].push_back(1);
	ans[2].push_back(2);
	if(n==1)
	{
		cout<<v[1]<<endl;
		cout<<1<<endl;
		return 0;
	}
	if(n==2)
	{
		if(v[1]>v[2])
		{
			cout<<v[1]<<endl<<1<<endl;
		}else{
			cout<<v[2]<<endl<<2<<endl;
		}
		return 0;
	}
//	cout<<dp[2]<<endl;
	for(int i=3;i<=n;i++)
	{
//		cout<<"i = "<<i<<endl;
		dp[i]=dp[i-1];
		ans[i]=ans[i-1];
		for(int j=i-2;j>=1;j--)
		{
//			cout<<dp[j]<<endl;
			if(dp[j]+v[i]>dp[i])
			{
				dp[i]=dp[j]+v[i];
				ans[i].clear();
				ans[i]=ans[j];
				ans[i].push_back(i);
			}
//			cout<<dp[i]<<endl;
		}
		
	}
	if(dp[n]>dp[n-1])
	{
		cout<<dp[n]<<endl;
		sort(ans[n].begin(),ans[n].end());
		for(int i=0;i<ans[n].size();i++)cout<<ans[n][i]<<" ";
	}else{
		cout<<dp[n-1]<<endl;
		sort(ans[n-1].begin(),ans[n-1].end());
		for(int i=0;i<ans[n-1].size();i++)cout<<ans[n-1][i]<<" ";
	}
	cout<<endl;
	return 0;
}
0