Redian新闻
>
成都计生办的李琢主任是个好官啊,就是以为微博别人看不见 (转载)
avatar
成都计生办的李琢主任是个好官啊,就是以为微博别人看不见 (转载)# Joke - 肚皮舞运动
C*U
1
假设我有一个正整数n,我要把他写成一些正整数的和。是组合问题,也就是说数字的
顺序不考虑。
有什么好的办法没有
我写了一个recrusive的,请大牛们指教一下
int count = 0;
//构造以max为最大数的 number的partition
void partitionWithMax(int number, int max) {
if(!number) {
count++;
return;
}
else {
int newMax = number > max ? max : number;
for(int i = newMax; i > 0; i--) {
partitionWithMax(number - i, i);
}
}
}
//让max从1到number都走一边
void partition(int number) {
for(int i = number; i > 0; i--) {
partitionWithMax(number - i, i);
}
}
avatar
f*r
2
【 以下文字转载自 Military 讨论区 】
发信人: NiuBi (牛屄), 信区: Military
标 题: 成都计生办的李琢主任是个好官啊,就是以为微博别人看不见
发信站: BBS 未名空间站 (Thu Apr 12 16:33:24 2012, 美东)
如此清廉、有思想的公仆已经不多了啊
avatar
C*U
3
没人搭理我。。。

【在 C***U 的大作中提到】
: 假设我有一个正整数n,我要把他写成一些正整数的和。是组合问题,也就是说数字的
: 顺序不考虑。
: 有什么好的办法没有
: 我写了一个recrusive的,请大牛们指教一下
: int count = 0;
: //构造以max为最大数的 number的partition
: void partitionWithMax(int number, int max) {
: if(!number) {
: count++;
: return;

avatar
Z*Z
4
没看懂题。。。

【在 C***U 的大作中提到】
: 没人搭理我。。。
avatar
C*U
5
例子
4的partition是如下几个
4
3+1
2+2
2+1+1
1+1+1+1

【在 Z*****Z 的大作中提到】
: 没看懂题。。。
avatar
p*2
6
如果只是求count不是用dp就可以了吗?
avatar
C*U
7
我这里倒是还打出来了
如果只是count 如何dp

【在 p*****2 的大作中提到】
: 如果只是求count不是用dp就可以了吗?
avatar
p*2
8

每看到你的程序打印呀

【在 C***U 的大作中提到】
: 我这里倒是还打出来了
: 如果只是count 如何dp

avatar
d*o
9
你这题就是用硬币找零是一道题。
give you 4 coins , 1,5,10, 25 cents, to make change to N cents。
去看那道题就可以了。

【在 C***U 的大作中提到】
: 假设我有一个正整数n,我要把他写成一些正整数的和。是组合问题,也就是说数字的
: 顺序不考虑。
: 有什么好的办法没有
: 我写了一个recrusive的,请大牛们指教一下
: int count = 0;
: //构造以max为最大数的 number的partition
: void partitionWithMax(int number, int max) {
: if(!number) {
: count++;
: return;

avatar
p*2
10

def count(n):
dp=[[0]*(n+1) for i in xrange(n+1)]
dp[0][0]=1

for i in xrange(1,n+1):
for j in xrange(n+1):
dp[i][j]=dp[i-1][j]
if j>=i:
dp[i][j]+=dp[i][j-i]
return dp[n][n]

【在 C***U 的大作中提到】
: 我这里倒是还打出来了
: 如果只是count 如何dp

avatar
Z*Z
11
拜二爷

【在 p*****2 的大作中提到】
:
: def count(n):
: dp=[[0]*(n+1) for i in xrange(n+1)]
: dp[0][0]=1
:
: for i in xrange(1,n+1):
: for j in xrange(n+1):
: dp[i][j]=dp[i-1][j]
: if j>=i:
: dp[i][j]+=dp[i][j-i]

avatar
C*U
12

我电脑上是打印的。。。在这里 我改掉了。。
就是把return前面 吧数组打印出来就可以了

【在 p*****2 的大作中提到】
:
: def count(n):
: dp=[[0]*(n+1) for i in xrange(n+1)]
: dp[0][0]=1
:
: for i in xrange(1,n+1):
: for j in xrange(n+1):
: dp[i][j]=dp[i-1][j]
: if j>=i:
: dp[i][j]+=dp[i][j-i]

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。