�果

�題 No.37 �園地�アトラクション
コンテスト
ユーザー takana-sky07
�出日時 2019-07-31 01:12:00
言語 C++17
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
�果
AC  
実行時間 3 ms / 5,000 ms
コード長 1,660 bytes
記録
記録タグ�例:
�AC ショートコード 純ショートコード 純主�ショートコード 最速実行時間
コンパイル時間 458 ms
コンパイル使用メモリ 90,752 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-06-07 15:43:29
�計ジャッジ時間 1,845 ms
ジャッジサー�ーID
(�考情報)
judge1_0 / judge2_0
��コード���ャレンジ
(�ログイン)
ファイルパターン �果
sample AC * 4
other AC * 27
権���れ�一括ダウンロード�����

ソースコード

diff #
raw source code

/*
* 037_sample.cpp
* 
* No.37 —V‰€’n‚̃Aƒgƒ‰ƒNƒVƒ‡ƒ“
* “ïˆÕ“x3
*/

#include <iostream>
#include <vector>
#include <cstdio>

using VEC = std::vector<int>;


int main () {
	// •W�€“ü—Í
	int T = 0;		// ‘Ø�ÝŽžŠÔ
	int N = 0;		// ƒAƒgƒ‰ƒNƒVƒ‡ƒ“‚Ì�”
	std::cin >> T >> N;
	VEC c(N*9+1);		// ƒAƒgƒ‰ƒNƒVƒ‡ƒ“‚̑҂¿ŽžŠÔ(+�æ‚蕨‚ÌŽžŠÔ)
	VEC v(N*9+1);		// –ž‘«“x
	for (int i = 0; i < N; i++) {
		std::cin >> c[i];
	}
	for (int i = 0; i < N; i++) {
		std::cin >> v[i];
	}

	// �‰Šú‰»
	int dp[N+1][T+1];
	for (int i = 0; i < N+1; i++) {
		for (int j = 0; j < T+1; j++) {
			dp[i][j] = -1;
		}
	}

	// dp[ƒAƒgƒ‰ƒNƒVƒ‡ƒ“�”][‘Ò‚¿ŽžŠÔ‚Ì�‡Œv]=–ž‘«“x
	// 0”Ô–Ú‚©‚ÂŽžŠÔ0‚Í1‚‚àƒAƒgƒ‰ƒNƒVƒ‡ƒ“‚É�æ‚Á‚Ä‚¢‚È‚¢�ó‘Ԃ̈זž‘«“x0
	dp[0][0] = 0;
	
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j <= T; ++j) {
			int sum = 0;
			dp[i+1][j] = dp[i][j];
			for (int k = v[i], count = 1; 0 <= k; k /= 2, count++ ) {
				// ŒJ‚è•Ô‚µ“¯‚¶ƒAƒgƒ‰ƒNƒVƒ‡ƒ“‚É�æ‚邽‚Ñ–ž‘«“x‚ªŒ¸�­
				// 0‚Æ‚È‚é‚Æ‚»‚êˆÈ�ã‚Í�æ‚Á‚Ä‚àˆÓ–¡‚ª‚È‚¢ˆ×‘Å‚¿�Ø‚è
				if (k == 0) {
					break;
				}
				// i”Ô–Ú‚Ì–ž‘«“x�‡Œv
				sum += k;
				if (j - c[i] * count >= 0) {
					// i”Ԗڂ̃Aƒgƒ‰ƒNƒVƒ‡ƒ“‚Écount‰ñ�”�æ‚Á‚½‚Æ‚«‚Ì�‡ŒvŽžŠÔ‚ª
					// ‘Ø�ÝŽžŠÔ‚ð’´‚¦‚Ä‚¢‚È‚¢�ê�‡
					if (dp[i][j - c[i] * count] != -1) {
						dp[i+1][j] = std::max(dp[i+1][j], dp[i][j - c[i] * count] + sum);
					}
				}
			}
		}
	}
	
	// �Å�I“I‚É�ÅŒã‚ÌŠX‚Å‚©‚©‚Á‚½ŽžŠÔ‚ňê”Ô�¬‚³‚¢‚à‚̂𓚂¦‚Æ‚·‚é
	int ans = 0;
	for (int i = 0; i <= T; ++i) {
		ans = std::max(ans, dp[N][i]);
	}
	
	// �ÅŒã‚ÌŠX‚܂ł½‚ǂ蒅‚¯‚Ä‚¢‚È‚¢�ê�‡‚Í-1‚Æ‚·‚é
	std::cout << ans << std::endl;

	return 0;
	
}
0