• 组合数学——USACO3.2.2


    主要用到公式 (表示m个数里存在1的个数最多n的组合数)
    而这个公式的实现过程是递归,遇到n==0||m==0返回1后回归,有值时也返回值后回归
    思路就是,先看左边第1位(不存在1时)的组合数是否小于di,若小于则说明左边第1位存在1…^
    View Code
    #include<stdio.h>
    unsigned
    int dp[33][33];
    unsigned swap(
    int a,int b)
    {
    if(a==0||b==0)return 1;
    if(dp[a][b]!=0)return dp[a][b];
    return dp[a][b]=swap(a-1,b-1)+swap(a,b-1);
    }
    int main()
    {
    int n,cun,di;
    while(scanf("%d%d%d",&n,&cun,&di)!=EOF)
    {
    int i;
    for(i=n;i>=1;i--)
    {
    if(cun!=0&&(swap(cun,i-1)<di))
    {
    printf(
    "1");
    di
    -=swap(cun,i-1);
    cun
    --;
    }
    else
    {
    printf(
    "0");
    }
    }
    printf(
    "\n");
    }
    }
  • 相关阅读:
    python基本数据类型剖析
    常用正则表达式
    python_re模块
    迭代器模式
    状态模式
    备忘录模式
    asp.net 发送邮件
    建造者模式
    抽象工厂模式
    摸板模式与钩子
  • 原文地址:https://www.cnblogs.com/huhuuu/p/1977584.html
Copyright © 2020-2023  润新知