POJ 3132 Sum of Different Primes 【01背包】

背包题还是太难太难,不是公式难,是理解公式运用公式太难


把n拆分成k个不同素数的和,有多少种方法。n不超过1120,k不超过14,一看就是个打表的题

首先把所有素数打表出来

然后,打表dp【i】【j】:把i拆分成j个不同的素数的和的方案数是多少


这个不同怎么来理解?

用01背包来理解:每个素数去参与选择,只有1次选择机会(也就是说选或者不选,那么就是循环中的第一维)

由于是01背包,那么n这个值就是第二维,而且必须是降序

得到递推式子:

dp【i】【j】=sum{dp【i-prime【x】】【j-1】},其中i-prime【x】>=0


代码如下:

//#include<bits/stdc++.h>
//using namespace std;
#include<iostream>
#include<cstdio>
#include<stdio.h>
#include<cstdlib>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<cstring>
using namespace std;

const int maxn=1120;
const int INF=0x3f3f3f3f;
int prime[maxn+1];
int dp[maxn+1][50];

void getprime(){
    memset(prime,0,sizeof(prime));
    for(int i=2;i<=maxn;i++){
        if (!prime[i]) prime[++prime[0]]=i;
        for(int j=1;j<=prime[0]&&prime[j]<=maxn/i;j++){
            prime[prime[j]*i]=1;
            if (i%prime[j]==0) break;
        }
    }
}

int main(){
    //freopen("input.txt","r",stdin);
    int n,k;
    getprime();
    //for(int i=1;i<=prime[0];i++)
      //  printf("%d%c",prime[i],i==prime[0]?'\n':' ');
    memset(dp,0,sizeof(dp));
    dp[0][0]=1;
    for(int k=1;k<=prime[0];k++)
        for(int i=1120;i>=1;i--)
            if (i>=prime[k])
                for(int j=1;j<=14;j++)
                    dp[i][j]+=dp[i-prime[k]][j-1];
    while(scanf("%d%d",&n,&k)!=EOF){
        if (n+k==0) break;
        printf("%d\n",dp[n][k]);
    }
    return 0;
}


全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
443603次浏览 4524人参与
# 春招别灰心,我们一人来一句鼓励 #
42308次浏览 539人参与
# 北方华创开奖 #
107485次浏览 600人参与
# 地方国企笔面经互助 #
7978次浏览 18人参与
# 同bg的你秋招战况如何? #
77334次浏览 569人参与
# 实习必须要去大厂吗? #
55824次浏览 961人参与
# 阿里云管培生offer #
120500次浏览 2222人参与
# 虾皮求职进展汇总 #
116484次浏览 887人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11711次浏览 292人参与
# 实习,投递多份简历没人回复怎么办 #
2455078次浏览 34862人参与
# 提前批简历挂麻了怎么办 #
149970次浏览 1979人参与
# 在找工作求抱抱 #
906139次浏览 9423人参与
# 如果公司给你放一天假,你会怎么度过? #
4764次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196082次浏览 18551人参与
# 机械人春招想让哪家公司来捞你? #
157650次浏览 2267人参与
# 双非本科求职如何逆袭 #
662415次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12811次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35944次浏览 384人参与
# 简历中的项目经历要怎么写? #
86956次浏览 1517人参与
# 参加完秋招的机械人,还参加春招吗? #
20156次浏览 240人参与
# 我的上岸简历长这样 #
452084次浏览 8089人参与
牛客网
牛客企业服务