zoukankan      html  css  js  c++  java
  • 蓝桥杯--2011--购物券(dfs)

    

    公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。

    程序输入:

    第一行是一个整数m,代表可购买的商品的种类数。

    接下来是m个整数,每个1行,分别代表这m种商品的单价。

    程序输出:

    第一行是一个整数,表示共有多少种方案

    第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。

    例如:

    输入:

    2

    200

    300

    则应输出:

    2

    2 2

    5 0

    输入:

    2

    500

    800

    则应输出:

    1

    2 0


    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int num[1010],vis[1010];
    int d[1010][1010],n,sum,ans;
    void dfs(int x)
    {
    	if(ans>1000||x>=n) return ;
    	if(ans==1000)
    	{
    		for(int i=0;i<n;i++)
    		d[sum][i]=vis[i];
    		sum++;//方案数加一 
    		return ;
    	}
    	ans+=num[x];
    	vis[x]++;
    	dfs(x);//同一个物品多次使用 
    	vis[x]--;//回溯 
    	ans-=num[x];
    	dfs(x+1);
    }
    int main()
    {
    	while(scanf("%d",&n)!=EOF)
    	{
    		memset(vis,0,sizeof(vis));
    		memset(num,0,sizeof(num));
    		memset(d,0,sizeof(d));
    		for(int i=0;i<n;i++)
    		scanf("%d",&num[i]);
    		sum=0;ans=0;
    		dfs(0);
    		printf("%d
    ",sum);
    		for(int i=0;i<sum;i++)
    		{
    			for(int j=0;j<n-1;j++)
    			printf("%d ",d[i][j]);
    			printf("%d
    ",d[i][n-1]);
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    win32获取其它进程变量地址存放的信息
    c#中的组件拖拽和MouseMove事件
    C# 使用消息驱动
    python使用dbm持久字典详解
    python http请求
    Windows 7下解决因为itunes备份导致C盘过度臃肿问题
    鼠标形状
    IE Haslayout 详解摘自网友
    Zoom属性摘自网友
    css公共属性
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273407.html
Copyright © 2011-2022 走看看