• 物资调度


    题目描述

    某地区发生了地震,灾区已经非常困难,灾民急需一些帐篷、衣物、食品和血浆等物资。可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁。国家立即启动应急预案,展开史上最大强度的非作战式的空运行动,准备向灾区投放急需物资。

    一方有难,八方支援。现在已知有N个地方分别有A1,A2,….,An个物资可供调配。目前灾区需要物资数量为M。 

    现在,请你帮忙算一算,总共有多少种物质调度方案。假设某地方一旦被选择调配,则其物资数全部运走。

    输入

    第一行: K     表示有K组测试数据。

    接下来对每组测试数据有2行,第1行:  N  M

                  第2行:A1  A2 ……  An 

    输出

    对于每组测试数据,输出一行:物资调度的总方案数

    样例输入

    24 41 1 2 24 61 1 2 2

    样例输出

    31

    提示


    2≤K≤8     1<N≤100   1<M≤1000     1≤ Ai≤1000  



    所有数据都是正整数。输入数据之间有一个空格。假设给定的数据至少有一种调度方案。

    dfs算法:

    #include<stdio.h>
    #include<string.h>
    #define N 120
    int n,m,ans;
    int a[N],book[N],num[N];
    void dfs(int s,int x,int y)
    {
    	int i;
    	if(s>m)
    		return ;
    	if(s==m)
    	{
    		ans++;
    		return ;
    	}
    	for(i=x;i<n;i++)
    	{
    		if(book[i]==0)
    		{
    			s+=a[i];
    			book[i]=1;
    			num[y]=a[i];
    			dfs(s,i,y+1);
    			book[i]=0;
    			s-=a[i];
    		}
    	}
    	return ;
    }
    int main()
    {
    	int k,i;
    	scanf("%d",&k);
    	while(k--)
    	{
    		scanf("%d%d",&n,&m);
    		for(i=0;i<n;i++)
    			scanf("%d",&a[i]);
    		memset(book,0,sizeof(book));
    		ans=0;
    		dfs(0,0,0);
    		printf("%d
    ",ans);
    	}
    	return 0;
    }

    dp算法:

    #include<stdio.h>
    #include<string.h>
    #define maxn 1010
    int dp[maxn],m,n,vis[maxn];
    int main()
    {
        int t,i,j;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            for(int i = 0; i < n; i ++)
                scanf("%d",&vis[i]);
            memset(dp,0,sizeof(dp));
            dp[0] = 1;
            for(i = 0; i < n; i ++)
                for(j = m; j >= vis[i]; j --)
                    dp[j] = dp[j] + dp[j-vis[i]];
                printf("%d
    ",dp[m]);
        }
        return 0;
    }


  • 相关阅读:
    Oracle OCP提纲
    Oracle redo 日志损坏的几种情况下的恢复
    Oracle 归档开启切换和归档日志删除(单实例和RAC)
    MySQL mysqldump备份与恢复
    Oracle 卸载
    MySQL脚本自动安装mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz
    Oracle session出现大量的inactive
    Oracle 备份与恢复基础
    NuGet 下载dll
    Azure Service Bus
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/10003051.html
Copyright © 2020-2023  润新知