結果
| 問題 | 
                            No.258 回転寿司(2)
                             | 
                    
| コンテスト | |
| ユーザー | 
                             plasma_e
                         | 
                    
| 提出日時 | 2019-01-20 22:29:01 | 
| 言語 | C++17  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 990 ms / 2,000 ms | 
| コード長 | 843 bytes | 
| コンパイル時間 | 1,035 ms | 
| コンパイル使用メモリ | 126,196 KB | 
| 最終ジャッジ日時 | 2025-01-06 20:32:20 | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 67 | 
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
#include<set>
#include<map>
#include<string>
#include<iomanip>
#include<cmath>
#include<stack>
#include<tuple>
int main()
{
	std::map<int, int> map;
	map[0] = -1;
	int N;
	std::cin >> N;
	std::vector<int> vec(N);
	for (int i = 1; i <= N; ++i)
	{
		int V;
		std::cin >> V;
		vec[i - 1] = V;
		for (auto&[sum, prev] : map)
		{
			if (prev < i - 1 && !map.count(sum + V))
			{
				map[sum + V] = i;
			}
		}
	}
	auto[s0, p0] = *map.rbegin();
	auto s = s0;
	auto p = p0;
	std::cout << s << std::endl;
	std::stack<int> stack;
	while (p != -1)
	{
		stack.emplace(p);
		s -= vec[p - 1];
		p = map[s];
	}
	while (stack.size())
	{
		auto t = stack.top();
		stack.pop();
		std::cout << t << " ";
	}
	std::cout << std::endl;
}
            
            
            
        
            
plasma_e