zoukankan      html  css  js  c++  java
  • 完全背包——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;
    }



  • 相关阅读:
    jsp第四次
    jsp第二次作业
    jsp第一次作业
    软件测试课堂练习
    11.11日
    10.28
    10.25
    10.21
    jsp第七周作业
    JSP第六周作业
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2321631.html
Copyright © 2011-2022 走看看