• 完全背包——poj 3181


    题意:有数字n,m

    1-m的数字(数字个数无限制)可以组成多少个n

    完全背包

    dp[j]=dp[j]+dp[i-j];

    注意大数,刚开始没有写前导0,WA了一次

    View Code
    #include<stdio.h>
    #include<string.h>

    const int MOD=100000000;

    struct data
    {
    int s[9];
    }dp[1009];

    data add(data a,data b)
    {
    int i=0;
    data ret;
    ret.s[i]=(a.s[i]+b.s[i])%MOD;
    for(i=1;i<9;i++)
    {
    ret.s[i]=(a.s[i]+b.s[i]+(a.s[i-1]+b.s[i-1])/MOD)%MOD;
    a.s[i]+=(a.s[i-1]+b.s[i-1])/MOD;
    }
    return ret;
    }

    void show(data a)
    {
    int i=8;
    while(a.s[i]==0) i--;
    int k=i,j,add;
    for(;i>=0;i--)
    {
    if(k==i)
    printf("%d",a.s[i]);
    else
    {
    add=0;
    int temp=a.s[i];
    while(temp!=0)
    {
    add++;
    temp/=10;
    }
    add=8-add;
    while(add--)printf("0");
    printf("%d",a.s[i]);
    }
    }
    printf("\n");
    }

    int max(int a,int b)
    {
    if(a>b)return a;
    else return b;
    }

    int main()
    {
    int n,m;

    while(scanf("%d%d",&n,&m)!=EOF)
    {
    int i,j;
    memset(dp,0,sizeof(dp));
    dp[0].s[0]=1;
    for(i=1;i<=m;i++)
    {
    for(j=i;j<=n;j++)
    {
    dp[j]=add(dp[j],dp[j-i]);
    }
    }

    show(dp[n]);
    }

    return 0;
    }



  • 相关阅读:
    IO流
    泛型类
    自动打包&解包:auto-boxing&unboxing
    Map接口
    如何选择数据结构
    Compareable接口
    List常用算法
    equals和==
    List接口
    set接口
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2321631.html
Copyright © 2020-2023  润新知