zoukankan      html  css  js  c++  java
  • Codeforces 687C The Values You Can Make(DP)

    题目大概说给n个各有价值的硬币,要从它们中选出若干个组合成面值k,而要求的是各个方案里这些选出的硬币能组合出来的面值有哪些。

    有点绕。。

    • dp[i][j][k]表示前i个硬币中 能否 组合成面值j且选出的硬币能组合成面值k
    • 转移要考虑全面。。三个方向转移,第i个不选、第i个选但不参与选出硬币去组合成k、第i个选且参与选出硬币去组成成k
     1 #include<cstdio>
     2 using namespace std;
     3 
     4 bool d[555][555][555];
     5 int main(){
     6     int n,K,a;
     7     scanf("%d%d",&n,&K);
     8     d[0][0][0]=1;
     9     for(int i=0; i<n; ++i){
    10         scanf("%d",&a);
    11         for(int j=0; j<=K; ++j){
    12             for(int k=0; k<=K; ++k){
    13                 if(d[i][j][k]==0) continue;
    14                 d[i+1][j][k]=1;
    15                 if(j+a<=K){
    16                     d[i+1][j+a][k]=1;
    17                     if(k+a<=K){
    18                         d[i+1][j+a][k+a]=1;
    19                     }
    20                 }
    21             }
    22         }
    23     }
    24     int cnt=0;
    25     for(int k=0; k<=K; ++k){
    26         if(d[n][K][k]){
    27             ++cnt;
    28         }
    29     }
    30     printf("%d
    ",cnt);
    31     for(int k=0; k<=K; ++k){
    32         if(d[n][K][k]){
    33             printf("%d ",k);
    34         }
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    php stdClass转数组
    PHP 获取1970年前的时间戳,且为负
    springboot响应格式Resullt封装
    php使用elasticsearch
    day0620211207
    day0820211209
    day022021121
    day0520211206
    day0720211208
    day0320211202
  • 原文地址:https://www.cnblogs.com/WABoss/p/5657210.html
Copyright © 2011-2022 走看看