UVa 1213 (01背包变形) Sum of Different Primes

摘要:
D(i,j)表示i个素数的和是j的方案数,则D(i,j)=sigmad,其中p[k]表示第k个素数。注意,递归顺序是向后的,否则将计算重复。代码中第二和第三个循环的顺序是可互换的。vis[i])素数[cnt++]=i;18} 1920voidp()21{22d[0][0]=1;23for24用于//的j个素数25的和是k26d[j][k]+=d[j-1][k-prime[i]];27}2829intmain()30{31//freopen;32Init();33dp();34intk,n;35whileprintf;3637return0;38}代码:

题意:

选择K个质数使它们的和为N,求总的方案数。

分析:

虽然知道推出来了转移方程, 但还是没把代码敲出来,可能基本功还是不够吧。

d(i, j)表示i个素数的和为j的方案数,则 d(i, j) = sigma d(i-1, j-p[k]) ,其中p[k]表示第k个素数

注意递推的顺序是倒着推的,否则会计算重复的情况。

代码中第二重和第三重循环的顺序可互换。

UVa 1213 (01背包变形) Sum of Different Primes第1张UVa 1213 (01背包变形) Sum of Different Primes第2张
 1 #include <cstdio>
 2 #include <cmath>
 3 
 4 const int maxp = 190;
 5 const int maxn = 1120;
 6 int cnt = 0;
 7 int prime[maxp];
 8 bool vis[maxn + 10];
 9 
10 int d[15][maxn + 10];
11 
12 void Init()
13 {
14     int m = sqrt(maxn + 0.5);
15     for(int i = 2; i <= m; ++i) if(!vis[i])
16         for(int j = i * i; j <= maxn; j += i) vis[j] = true;
17     for(int i = 2; i <= maxn; ++i) if(!vis[i]) prime[cnt++] = i;
18 }
19 
20 void dp()
21 {
22     d[0][0] = 1;
23     for(int i = 0; i < cnt; ++i)
24         for(int j = 14; j > 0; --j) //j个质数的和
25             for(int k = maxn; k >= prime[i]; --k) //为k
26                 d[j][k] += d[j-1][k-prime[i]];
27 }
28 
29 int main()
30 {
31     //freopen("in.txt", "r", stdin);
32     Init();
33     dp();
34     int k, n;
35     while(scanf("%d%d", &n, &k) == 2 && n) printf("%d
", d[k][n]);
36 
37     return 0;
38 }
代码君

免责声明:文章转载自《UVa 1213 (01背包变形) Sum of Different Primes》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【北邮人论坛帖子备份】【心得】关于找实习的一些准备Python:Python 自动化测试框架 unittest 和 pytest 对比下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

《学习opencv》笔记——矩阵和图像操作——cvAnd、cvAndS、cvAvg and cvAvgSdv

矩阵和图像的操作cvAnd函数其结构voidcvAnd;程序实例#include#include#includeintmain{IplImage*src1,*src2,*src3;src1=cvLoadImage;src2=cvLoadImage;src3=cvLoadImage;cvAnd;cvShowImage;cvShowImage;cvShowIma...

Kafka监控工具——Kafka-Eagle

Kafka监控工具官网https://www.kafka-eagle.org/是什么KafkaEagle是一款用于监控和管理ApacheKafka的完全开源系统,目前托管在Github,由笔者和一些开源爱好者共同维护。而且,在使用消费者API时,尽量#客户端KafkaAPI版本和Kafka服务端的版本保持#一致性。...

backgroundsize

当背景大小值为和时,可以设置两个值,也可以设置一个值。当只取一个值时,第二个值相当于auto,但此处的auto不会将背景图像的高度保持在其原始高度,而是与第一个值相同。此外,如果只取一个值,宽度和高度将相同,这相当于背景大小:80%自动。...

SQLServer2008/2012 安装、添加sa用户和密码、多实例安装、修改端口, 重启生效

因为我们无法使用sa用户登录,所以只能使用系统登录。登录后,我们需要修改相关属性。右键单击数据库,然后单击属性。在这个sa的登录属性对话框中,我们首先需要设置这个用户的密码。由于此用户名是系统的用户,我们可以直接填写密码,然后再次确认密码。然后在对话框中,单击左上角的第二个属性服务器角色。这是您要实现的添加用户的角色。...

adb

ADB(AndroidDebugBridge)ANR(ApplicationNoResponding)ADB实际上是Android调试桥AndroidDebugBridge的缩写。adb是C/S体系结构的命令行工具。这里我们介绍一些常用的命令:adbdevices,获取设备列表和设备状态[xuxu:~]$adbdevicesList-devicesattac...

文件(夹)对比利器WinMerge

IDE中自带的svn功能较弱,还好有winMerge弥补了它的缺陷,它可以对比文件、文件夹,使用起来还是较为方便,界面也是中文。“开始”菜单,弹出对话框中选择需要进行对比的文件夹或文件然后选择一个过滤器,它自带就可以过滤掉svn目录,如需要过滤其它一些指定的目录,则需要自己修改过滤器的规则了,也很简单。...