P07254. 数字的拆分之一


将数字N分成2份以上.使用的数字不可重复.例如5=1+4=2+3,就只有两种拆分的方式.输入: 每一行给出一个数字N,3<=N<=500.整个测试以0代表结束.

输入
本题有多组数据,整个测试以数字零代表结束

输出
输出有多行,每行一个数字,代表拆分的种数.

样例
输入复制
3
5
0
输出复制
1
2

 

Sol1:

#include<bits/stdc++.h>
using namespace std;
long long f[510][510];
int main() 
{
	int n;
	f[0][0]=1;
	for(int i=1; i<=6; i++)
	{
	
		for(int j=0; j<=6; j++) 
		{
			f[i][j]=f[i-1][j];
			if(j>=i) 
			   f[i][j]+=f[i-1][j-i];
		//cout<<i<<"  "<<j<<"  "<<f[i][j]<<endl; 
		}
   }
	while(cin>>n) 
	{
		if(n==0) return 0;
		cout<<f[n][n]-1<<"\n";
	}
	return 0;
}

  

 

#include <bits/stdc++.h> 
#define int unsigned long long
using namespace std;
const int N=550;
int n,f[N];
signed main() {
	while(scanf("%lld",&n)&&n){
		memset(f,0,sizeof(f));
		f[0]=1;
		for(int i=1;i<n;i++)
			for(int j=n;j>=i;j--) 
				f[j]=(f[j]+f[j-i]);
		printf("%lld\n",f[n]);
	}
	return 0;
}

  

 

 

P07255. 数字的拆分之二

Description
将数字N进行拆分.拆分出来的数字可以重复使用.

Format
Input
每一行给出一个数字N,3<=N<=500.整个测试以0代表结束.

Output
拆分的种数.

Samples
输入数据 1
3
0
输出数据 1
3
说明: 3=3,3=1+1+1,3=1+2。

       状态

 

阶段

0

1

2

3

4

5

6

7

0

1

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

2

1

1

2

2

3

3

4

4

3

1

1

2

3

4

5

7

8

4

1

1

2

3

5

6

9

11

5

1

1

2

3

5

7

10

13

6

1

1

2

3

5

7

11

       14

 

#include<bits/stdc++.h>
using namespace std;
long long f[510][510];
int main() 
{
	int n;
	f[0][0]=1;
	for(int i=1; i<=500; i++)
	{
		for(int j=0; j<=500; j++) 
		{
			f[i][j]=f[i-1][j];
			if(j>=i) 
			   f[i][j]+=f[i][j-i];
		//cout<<i<<"  "<<j<<"  "<<f[i][j]<<endl; 
		}
   }
	while(cin>>n) 
	{
		if(n==0) return 0;
		cout<<f[n][n]<<"\n";
	}
	return 0;
}

  

 

#include<bits/stdc++.h> 
using namespace std;
int w[505];
int main()
{
	int n;
    memset(w,0,sizeof(w));
	while(cin>>n && n!=0)
    {
        w[0]=1;
        for(int i=1;i<=n;i++)
            for(int j=i;j<=n;j++)
                w[j]+=w[j-i];
        cout<<w[n]<<endl;
    }
	return 0;
}

  

posted @ 2024-06-07 21:10  我微笑不代表我快乐  阅读(8)  评论(0编辑  收藏  举报