• Acwing2024蓝桥杯背包问题


    AcWing 2. 01背包问题

    1. #include
    2. using namespace std;
    3. const int N=1e3+5;
    4. int n,m,volume[N],value[N],dp[N][N];
    5. int main(){
    6. cin>>n>>m;
    7. for(int i=1;i<=n;i++) cin>>volume[i]>>value[i];
    8. for(int i=1;i<=n;i++){
    9. for(int j=0;j<=m;j++){
    10. dp[i][j]=dp[i-1][j];
    11. if(j>=volume[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-volume[i]]+value[i]);
    12. }
    13. }
    14. cout<
    15. return 0;
    16. }

    AcWing 3. 完全背包问题

    1. #include
    2. using namespace std;
    3. const int N=1e3+5;
    4. int n,m,volume[N],value[N],dp[N][N];
    5. int main(){
    6. cin>>n>>m;
    7. for(int i=1;i<=n;i++) cin>>volume[i]>>value[i];
    8. for(int i=1;i<=n;i++){
    9. for(int j=0;j<=m;j++){
    10. dp[i][j]=dp[i-1][j];
    11. if(j>=volume[i]) dp[i][j]=max(dp[i-1][j],dp[i][j-volume[i]]+value[i]);
    12. }
    13. }
    14. cout<
    15. return 0;
    16. }

    AcWing 1371. 货币系统

    1. #include
    2. using namespace std;
    3. long long n,m,dp[30][10005],volume[30];
    4. //dp[i][j]表示:只用前i种货币并且总钱数为j的所有方案数
    5. int main(){
    6. cin>>n>>m;
    7. for(int i=1;i<=n;i++) cin>>volume[i];
    8. for(int i=0;i<=n;i++) dp[i][0]=1;
    9. for(int i=1;i<=n;i++){
    10. for(int j=1;j<=m;j++){
    11. dp[i][j]=dp[i-1][j];
    12. if(j>=volume[i]) dp[i][j]+=dp[i][j-volume[i]];
    13. }
    14. }
    15. cout<
    16. return 0;
    17. }

    AcWing 1226. 包子凑数(第八届省赛)

    1. 裴蜀定理:
    2. 若a,b是整数,且gcd(a,b)=d
    3. 那么对于任意的整数x,y,(ax+by)都一定是d的倍数
    1. 如果这些数的gcd是d
    2. 那么他们的组合是d的倍数
    3. 如果d不是1
    4. 那么必然有无限个数无法被组合出来
    1. #include
    2. using namespace std;
    3. int n,volume[105],ans;
    4. bool dp[105][10005];
    5. //dp[i][j]:用前i个笼子是否可以组成j个数目的包子
    6. //最大公约数:
    7. int gcd(int a,int b){
    8. return b?gcd(b,a%b):a;
    9. }
    10. int main(){
    11. cin>>n;
    12. int temp=0;
    13. for(int i=1;i<=n;i++){
    14. cin>>volume[i];
    15. temp=gcd(temp,volume[i]);
    16. }
    17. if(temp!=1) {puts("INF");return 0;}
    18. dp[0][0]=true;
    19. for(int i=1;i<=n;i++){
    20. for(int j=0;j<=10005;j++){
    21. dp[i][j]=dp[i-1][j];
    22. if(!dp[i][j]&&j>=volume[i]){
    23. dp[i][j]=dp[i][j-volume[i]];
    24. }
    25. }
    26. }
    27. for(int j=0;j<=10005;j++) if(!dp[n][j]) ans++;
    28. cout<
    29. return 0;
    30. }

    AcWing 3417. 砝码称重(第十二届省赛)

    1. #include
    2. using namespace std;
    3. int n,volume[105],sum,ans;
    4. bool dp[105][200005];
    5. //dp[i][j]:用前i个砝码是否可以组成j,注意这里的j要开两倍(有绝对值)
    6. int main(){
    7. cin>>n;
    8. for(int i=1;i<=n;i++) cin>>volume[i],sum+=volume[i];
    9. dp[0][0]=true;
    10. for(int i=1;i<=n;i++){
    11. for(int j=0;j<=sum;j++){
    12. dp[i][j]=dp[i-1][j]||dp[i-1][j+volume[i]]||dp[i-1][abs(j-volume[i])];
    13. }
    14. }
    15. for(int i=1;i<=sum;i++) if(dp[n][i]) ans++;
    16. cout<
    17. return 0;
    18. }

    AcWing 1234. 倍数问题(第九届省赛)

    暴力法(超时未AC 60points):

    1. #include
    2. using namespace std;
    3. const int N=1e5+5;
    4. int n,m,a[N],ans;
    5. int main(){
    6. cin>>n>>m;
    7. for(int i=1;i<=n;i++) cin>>a[i];
    8. for(int i=1;i<=n;i++)
    9. for(int j=i+1;j<=n;j++)
    10. for(int k=j+1;k<=n;k++)
    11. if((a[i]+a[j]+a[k])%m==0) ans=max(ans,a[i]+a[j]+a[k]);
    12. cout<
    13. return 0;
    14. }
  • 相关阅读:
    Docker compose部署
    嵌入式开发:2022年5大嵌入式GUI趋势
    Vue封装websocket双向通讯
    Python使用遗传算法(Evolutionary Algorithm、进化算法)构建优化器获取机器学习模型最优超参数组合、拟合最佳模型、实战+代码
    从零开始做题:满屏的QR
    【博学谷学习记录】超强总结,用心分享|架构师-前置知识-mongodb基本使用
    超声波清洗机怎么选?优质清洁力强超声波清洗机推荐
    跟我学c++中级篇——c++11中的模板变参化
    FEELM利用能源管理系统建设绿色工厂,减少500吨碳排放
    Java类初始化、实例化流程你真的清楚吗
  • 原文地址:https://blog.csdn.net/2301_76144982/article/details/138999510