约翰想在他家后面的空地上建一个后花园,现在有两种砖,一种3
dm的高度,7
dm的高度。约翰想围成x
dm的墙。如果约翰能做到,输出YES,否则输出NO。
样例
Example 1:
Input : x = 10
Output : "YES"
Explanation :
x = 3 + 7:That is, you need one batch of 3 dm height bricks and one batch of 7 dm height bricks.
Example 2:
Input : x = 5
Output : "NO"
Explanation:
John can not enclose a high 5 dm wall with 3 dm height bricks and 7 dm height bricks.
Example 3:
Input : x = 13
Output : "YES"
Explanation :
x = 2 * 3 + 7:That is, you need two batch of 3 dm height bricks and one batch of 7 dm height bricks.
注意事项
X是一个整数,取值范围为 [3, 1000]
。
void myfunction (int i) { // function:
std::cout << ' ' << i;
}
class Solution {
public:
/**
* @param x: the wall's height
* @return: YES or NO
*/
string isBuild(int x) {
// write you code here
vector<int> dp(x+1,INT_MAX-1);
vector<int> coins;
coins.push_back(3);
coins.push_back(7);
dp[0] = 0;
for(int i = 0; i < dp.size(); i++)
{
for(int coin : coins)
{
if(i < coin)
continue;
dp[i] = min(dp[i], 1 + dp[i-coin]);
}
}
for_each (dp.begin(), dp.end(), myfunction);
return dp[x] == INT_MAX-1 ? "NO" : "YES";
}
};