• CF687C The Values You Can Make(dp)


    这道题可以设计状态位前i个,用了j块构造k,取j块中的x块这样的状态

    有点01背包的意思,每个钱可取可不取,对于j,x都是如此

    对于第二维,我们考虑是否取第i个,而对于第三维,我们考虑在第二维是否取得情况下,第三维是否取

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+10;
    const int mod=1e9+7;
    bool f[510][510][510];
    vector<int> num;
    int main(){
        int n,k;
        cin>>n>>k;
        int i,j,l;
        f[0][0][0]=1;
        for(i=1;i<=n;i++){
            int a;
            cin>>a;
            for(j=0;j<=500;j++){
                for(l=0;l<=j&&l<=k;l++){
                    if(f[i-1][j][l]||(j>=a&&(f[i-1][j-a][l]))||(j>=a&&l>=a&&(f[i-1][j-a][l-a])))
                        f[i][j][l]=1;
                }
            }
        }
        for(i=0;i<=k;i++){
            if(f[n][k][i]){
                num.push_back(i);
            }
    
        }
        int sign=(int)num.size();
        cout<<sign<<endl;
        for(auto x:num){
            cout<<x<<" ";
        }
        cout<<endl;
    }
    View Code
  • 相关阅读:
    1. flask框架-简介/快速启动
    conda创建、查看、删除虚拟环境
    DOM用法(二)
    DOM用法(一)
    BOM用法
    Javascript对象
    JavaScript基础篇
    mysql 外连接
    mysql 连接表 内连接 inner
    mysql分组函数
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12780128.html
Copyright © 2020-2023  润新知