結果
| 問題 | No.2922 Rose Garden | 
| コンテスト | |
| ユーザー |  pengin_2000 | 
| 提出日時 | 2024-10-12 16:34:52 | 
| 言語 | C (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 724 ms / 3,000 ms | 
| コード長 | 700 bytes | 
| コンパイル時間 | 113 ms | 
| コンパイル使用メモリ | 30,336 KB | 
| 実行使用メモリ | 6,820 KB | 
| 最終ジャッジ日時 | 2024-10-12 16:35:06 | 
| 合計ジャッジ時間 | 12,649 ms | 
| ジャッジサーバーID (参考情報) | judge / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 50 | 
ソースコード
#include<stdio.h>
long long int max(long long int a, long long int b)
{
	if (a > b)
		return a;
	else
		return b;
}
long long int h[200005];
long long int dp[1003];
int main()
{
	long long int n, s, b;
	scanf("%lld %lld %lld", &n, &s, &b);
	long long int i, j;
	for (i = 0; i < n; i++)
		scanf("%lld", &h[i]);
	for (i = 0; i <= s; i++)
		dp[i] = -1;
	dp[s] = h[0];
	for (i = 0; i < n; i++)
	{
		for (j = 0; j <= s; j++)
			if (dp[j] >= h[i])
				dp[s] = max(dp[s], h[i]);
		for (j = 0; j <= s; j++)
			if (dp[j] < h[i])
				dp[j] = -1;
		for (j = s; j > 0; j--)
			if (dp[j] >= 0)
				dp[j - 1] = max(dp[j - 1], dp[j] + b);
	}
	if (dp[s] < 0)
		printf("No\n");
	else
		printf("Yes\n");
	return 0;
}
            
            
            
        