lintcode题目
类型:枚举
难度:入门
版本1
两重循环枚举。
class Solution {
public:
string isBuild(int x) {
bool flag = true;
for(int i = 0; i <= 1000; i++){
for(int j = 0; j <= 1000; j++){
if(3*i+7*j > x) break;
if(3*i+7*j==x) return "YES";
}
}
return "NO";
}
};
版本2
完全背包
class Solution {
public:
string isBuild(int x) {
int bricks[]={3, 7};
int dp[1005]={0};
for(int i = 0; i < 2; i++){
for(int j = bricks[i]; j <= x; j++){
dp[j] = max(dp[j], dp[j-bricks[i]]+bricks[i]);
}
}
if(dp[x]==x) return "YES";
return "NO";
}
};