• 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 }
  • 相关阅读:
    Python max() 函数
    Python log10() 函数
    Python log() 函数
    Python fabs() 函数
    Java开源-astar:A 星算法
    9款超绚丽的HTML5/CSS3应用和动画特效
    Java中处理异常的9个最佳实践
    Java泛型
    Android界面性能调优手册
    正确使用Android性能分析工具——TraceView
  • 原文地址:https://www.cnblogs.com/WABoss/p/5657210.html
Copyright © 2020-2023  润新知