详细注释 | #数位染色#

数位染色

https://www.nowcoder.com/practice/adf828f399de4932955734a4eac12757

#include <iostream>
#include <string>
using namespace std;
const int N = 200;
int dp[N];
int main() {
    long long n;
    cin >> n;
    //将整个数字变成 数字字符数组
    string s = to_string(n);
    // 计算整个数组的数字和
    int sum = 0;
    for(int i = 0; i < s.length(); i++){
        sum += (s[i]-'0');
    }
    if(sum%2) {  // 和为奇数时,一定No
        cout << "No" << endl;
        return 0;
    }
    // 和为偶数时,问题转变成 : 给定一个容积为t的容器,每位数字表示物品的体积,装入物品,看是否能恰好装满容器
    int t = sum/2;   
    // 遍历每位 数字
    for(int i = 0; i < s.length(); i++){
        //遍历容量
        for(int j = t; j >= 0; j--){
            if(j-(s[i]-'0')>=0){
                // 当 容量大于物品i的体积时, dp[j] 不改变(不选物品i), dp[j]改变(选物品i)
                dp[j] = max(dp[j], dp[j-(s[i]-'0')]+(s[i]-'0'));
            }
        }
    }
    if(dp[t] == t){
        cout << "Yes" << endl;
    }else{
        cout << "No" << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

小米汽车 BMS 软件 18k*15
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务