zoukankan      html  css  js  c++  java
  • 测试数据整数搜索——Ny 90 整数划分

    在改章节中,我们主要介绍测试数据整数的内容,自我感觉有个不错的建议和大家分享下

        

        1)   目题

        整数分别

        时光制限:3000 ms  |  存内制限:65535 KB

        难度:3

        描述

        将正整数n表现成一系列正整数之和:n=n1+n2+…+nk 
    其中n1≥n2≥…≥nk≥1k≥1 
    正整数n的这类表现称为正整数n的分别。求正整数n的不 
    同分别个数。 
    例如正整数6有如下11种不同的分别: 
    6
     
    5+1
     
    4+2
    4+1+1 
    3+3
    3+2+13+1+1+1 
    2+2+2
    2+2+1+12+1+1+1+1 
    1+1+1+1+1+1
     

        输入

        每日一道理
    试试看——不是像企鹅那样静静的站在海边,翘首企盼机会的来临,而是如苍鹰一般不停的翻飞盘旋,执著的寻求。 试试看——不是面对峰回路转、杂草丛生的前途枉自嗟叹,而是披荆斩棘,举步探索。 试试看——不是拘泥于命运的禁锢,听凭命运的摆布,而是奋力敲击其神秘的门扉,使之洞开一个新的天地。微笑着,去唱生活的歌谣。

        第一行是测试据数的数目M1<=M<=10)。以下每行均包括一个整数n1<=n<=10)。

        输出

        输出每组测试据数有多少种分法。

        例样输入

        

    1

    6

        例样输出

        

    11


        2)    题意

        不再赘述。

        

        3)    据数范围

        测试据数数和n的值最大为10,据数量很小,手算都很轻易。

        

        4)    算法

        搜索法

        为了免避搜索到重复的分别法方,定规:

        分别序列a1+a2+…+an,ai>=ai+1, 1<=i<n。

        如下图是分别整数6的一棵搜索树。两方格内的字数是分别出的两个数。如6可以分别为5+1,4+2,3+3。

        

        图中以红色字数为根节点一棵树,即为该红色字数的分别搜索树。

        

        5)    代码

        

    #include <iostream>
    #include <cstdio>
    #include <ctime>
    
    using namespace std;
    
    int count;
    
    //num为要分别的数,minn为许允分别出的最小数
    void Backtrack(int num, int minn)
    {
    	//printf("%d %d\n", num, minn);
    	count++;
    	if (num > 1)
    	{
    		int left, right;
    		for (left = num-minn, right = minn; left >= right; left--, right++)
    		{
    			Backtrack(left, right);
    		}
    	}
    }
    
    int main(void)
    {
    	int ncases;
    	scanf("%d", &ncases);
    	while (ncases-- != 0)
    	{
    		int num;
    		scanf("%d", &num);
    		count = 0;
    		//clock_t start, finish;
    		//start = clock();
    		Backtrack(num, 1);
    		//finish = clock();
    		//printf("%lf\n",  (double)(finish - start) / CLOCKS_PER_SEC);
    		printf("%d\n", count);
    	}
    	return 0;
    }
    
    /*
    #include<iostream>
    using namespace std;
    int q(int n,int m)
    {
    	if((n<1)||(m<1) )return 0;
    	if(n==1||m==1) return 1;
    	if(n<m) return q(n,n);
    	if(n==m)return q(n,m-1)+1;
    	return q(n,m-1)+q(n-m,m);
    }
    int main()
    {
    	int a;
    	cin>>a;
    	while(a--)
    	{
    		int n;
    		cin>>n;
    		cout<<q(n,n)<<endl;
    	}
    	return 0;
    }
    */

        6)    测试据数

        10

        1

        2

        3

        4

        5

        6

        7

        8

        9

        7)    提交结果

        

        第一次,没有按输入式格来,心粗。

    文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”

  • 相关阅读:
    【我也不知道是从哪儿来的题】—树(矩阵树定理)
    【我也不知道是从哪儿来的题】—树(矩阵树定理)
    【BJOI2019 Day2】简要题解
    【BJOI2019 Day2】简要题解
    【BJOI2019 Day1】简要题解
    【BJOI2019 Day1】简要题解
    【BZOJ3935】—RBTree(树形dp)
    【BZOJ3935】—RBTree(树形dp)
    2016-8-12
    深入理解web项目的配置文件
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3034420.html
Copyright © 2011-2022 走看看