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;
    }


  • 相关阅读:
    Promis.then()
    原生JS简单封装JSONP跨域获取数据
    原生JavaScript手写Ajax
    VS Code保存代码自动按eslint格式fix
    html data-xx 及 data()注意事项
    C#委托和事件
    vue devServer proxy 代理无效的问题
    vue .sync的使用
    js中,0的判断
    使用idea启动node项目的问题
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273407.html
Copyright © 2011-2022 走看看