zoukankan      html  css  js  c++  java
  • hdu 2189还是dp..

    题目的意思比较简单,类似计数dp。

    一开始我想让dp[i]+=dp[i-prime] 每次遍历比i小的所有素数,然后发现有重叠的 比如 2+3 3+2

    就导致错误。看了其他人的填充方式,发现定下prime 然后定向的更新i就可以避免重复问题

    还有就是。。 尼玛的素数筛法居然 居然。。写错了。。 反省一个小时。。

    贴上丑陋的代码。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;//利用一个二分定位
    int myprime[200];
    void get_prime()// 小小的素数筛法
    {
        int vis[151];
        memset(vis,0,sizeof(vis));
        int ret=0;
        vis[1]=vis[0]=1;
        for(int i=2;i<=150;i++)
        {
            if(vis[i]==0)
            {
                myprime[++ret]=i;
                int j;
                for(j=i+i;j<=150;j+=i) vis[j]=1;//为1表示不是prime
            }
        }
    }
    int main()
    {
        //cin.sync_with(false);
        int dp[151];
        int t;
        cin>>t;
        get_prime();
        while(t--)
        {
            int n;
            cin>>n;
            memset(dp,0,sizeof(dp));
            dp[0]=1;
            for(int i=1;i<=35;i++)
            {
                for(int j=myprime[i];j<=n;j++) dp[j]+=dp[j-myprime[i]];
            }
            cout<<dp[n]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    andriod获得textView的值设置textView的text
    Android 自动生成的R类
    andriod 启动日历
    ggplot2在一幅图上画两条曲线
    R语言中动态安装库
    Python中的动态类
    Python中将dict转换为kwargs
    Apache负载均衡
    Python codecs小Tips
    Matlab求三重积分
  • 原文地址:https://www.cnblogs.com/z1141000271/p/6165604.html
Copyright © 2011-2022 走看看