zoukankan      html  css  js  c++  java
  • hdu 2189 悼念512汶川大地震遇难同胞——来生一起走

    题目

    这道题用了,埃式筛选法和背包,我自己没有做出来,看了别人的代码,我也做不出来,特别是c[j]+=c[j-b[i]];弄了好久都没有弄懂。
    这道题的解题思路:主要是先把150以内的所有素数找出来,存到一个数组里面,然后再用背包问题解决。

    #include<stdio.h>
    #include<string.h>
    int a[151]={0},b[151],c[151];
    //数组a存储数字的因子和,数组b存储素数,数组c存储每个数的分法
    int main()
    {
        memset(c,0,sizeof(c));
        int T,n,i,j,t=0;
        for(i =1; i<151; i++)//筛选法
        {
            if(a[i]==1) b[t++]=i;//因子和为1的就是素数
            for(j=2;i*j<151;j++)
                a[i*j]+=i;
        }
        c[0]=1;
        for( i=0;i<t;i++)//预处理,背包
            for(j=b[i];j<151;j++)
            c[j]+=c[j-b[i]];
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            printf("%d
    ",c[n]);
        }
    
        return 0;
    }


  • 相关阅读:
    npm
    模块化开发
    Html input 标签
    H5 移动端布局
    Mysql指令
    php面向对象
    git指令
    css3 属性
    如何渲染数据
    angular 服务
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160271.html
Copyright © 2011-2022 走看看