zoukankan      html  css  js  c++  java
  • 复习笔记之母函数

    HDU 1398 Square Coins

      题意:给 17 种面值的钱币,分别为:1-4-9-。。。-17^2.问 x(x <= 300) 能有多少种不同的兑换方式。

      思考:略~母函数简单模板题目。事实上还可以用完全背包来做。

      

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #include <cstring>
     5 #include <algorithm>
     6 using namespace std ;
     7 const int maxn = 333 ;
     8 int w[20] , c1[maxn] , c2[maxn] , k , N = 17 ;
     9 
    10 inline void muhanshu()
    11 {
    12     for (int i = 0 ; i <= k ; ++ i) c1[i] = 1 , c2[i] = 0 ;
    13     for (int p = 2 ; p <= N ; ++ p) {
    14         for (int i = 0 ; i <= k ; ++ i) {
    15             for (int j = 0 ; j + i <= k ; j += w[p]) {
    16                 c2[j+i] += c1[i] ;
    17             }
    18         }
    19         for (int i = 0 ; i <= k; ++ i) c1[i] = c2[i] , c2[i] = 0 ;
    20     }
    21     printf("%d
    ",c1[k]) ;
    22 }
    23 
    24 int f[maxn] ;
    25 
    26 void beibao()
    27 {
    28     memset(f,0,sizeof(f)) ;
    29     f[0] = 1 ;
    30     for (int i = 1 ; i <= N ; ++ i) {
    31         for (int j = w[i] ; j <= k ; ++ j) {
    32             f[j] += f[j-w[i]] ;
    33         }
    34     }
    35     printf("%d
    ",f[k]) ;
    36 }
    37 
    38 int main()
    39 {
    40     for (int i = 1 ; i <= 17 ; ++ i) w[i] = i*i ;
    41     while (scanf("%d",&k) == 1 && k) {
    42         //muhanshu() ;
    43         beibao() ;
    44     }
    45     return 0 ;
    46 }
    HDU1398

     HDU 1709 The Balance

      题意:有 N 个砝码,一个天平,问 1 到 砝码之和范围内的数字哪个不能组成,注意,砝码放在同一边加,两边减,也就是说每个砝码可以取 -1个,0个,1个。

      思考:需要思考么??不过因为幂次可能有负数,所以同乘砝码和就ok了,注意输出格式。

      

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #include <cstring>
     5 #include <queue>
     6 using namespace std ;
     7 const int maxn = 20010 ;
     8 int c1[maxn] , c2[maxn] , sum , N , A[maxn] ;
     9 
    10 int main()
    11 {
    12 //    freopen("1.txt","r",stdin) ;
    13     while (scanf("%d",&N) == 1) {
    14         sum = 0 ;
    15         for (int i = 1 ; i <= N ; ++ i) scanf("%d",&A[i]) , sum += A[i] ;
    16         memset(c1,0,sizeof(c1)) ;
    17         memset(c2,0,sizeof(c2)) ;
    18         c1[0] = c1[A[1]] = c1[2*A[1]] = 1 ;
    19         for (int k = 2 ; k <= N ; ++ k) {
    20             for (int i = 0 ; i <= sum*2 ; ++ i) {
    21                 for (int j = 0 ; j <= 2  && (i+j*A[k] <= sum*2) ; ++ j)
    22                 c2[i+j*A[k]] += c1[i] ;
    23             }
    24             for (int i = 0 ;i <= sum*2 ; ++ i) c1[i] = c2[i] , c2[i] = 0 ;
    25         }
    26         int ans[10010] , cnt = 0 ;
    27         for (int i = sum + 1 ; i <= sum*2 ; ++ i) if (c1[i] == 0) ans[++cnt] = i - sum ;
    28         printf("%d
    ",cnt);
    29         for (int i = 1 ; i <= cnt ; ++ i) {
    30             if (i == cnt) printf("%d
    ",ans[i]);
    31             else printf("%d ",ans[i]);
    32         }
    33     }
    34     return 0 ;
    35 }
    HDU1709

    ~end~

  • 相关阅读:
    ###JS获取URL参数的函数###
    Ant通配符
    java.lang.OutOfMemoryError处理错误
    超越最常用的快捷键
    一个完整的工作流管理系统成部分
    Caused by: org.hibernate.hql.ast.QuerySyntaxException: TkltEmpQuitProcess is not mapped. (SSH项目中出现的映射问题)
    小的心得
    diary record 20120423
    小的思想
    用3种方法检测远程URL是否存在。
  • 原文地址:https://www.cnblogs.com/smile-0/p/5395483.html
Copyright © 2011-2022 走看看