河南省ACM程序设计 物资调度

物资调度

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

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

现在,请你帮忙算一算,总共有多少种物质调度方案。

假设某地方一旦被选择调配,则其物资数全部运走。

Input

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

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

第2行:A1  A2 ……  An

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

所有数据都是正整数。输入数据之间有一个空格。

假设给定的数据至少有一种调度方案。

Output

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

Sample Input

24 41 1 2 24 61 1 2 2

Sample Output

31

思路:看到此题,开始以为是动态规划,结果超时了,后来发现深搜非常好。

代码如下:

#include<stdio.h>
#include<string.h>
int s[101],sum,m,n,book[101];
void dfs(int x,int i)//x表示当前调度物资之和,i表示物资的下标
{
    if(x>=m)//当物资总和大于等于灾区索要物资数量时结束循环
    {
        if(x==m)//当物资总和等于灾区需要物资数量,方案成功
        {
            sum++;//结果+1
            return;
        }
        return;//不满足结束
    }

    for(int j=i;j<=n;j++)
    {
       if(book[i]==0)//物资没有被用
       {
	     x+=s[j];//当前调度物资增加
         book[j]=1;//物资被使用
         dfs(x,j+1);//深搜
         book[j]=0;  //回溯
         x-=s[j];//减去不满足的,重新搜索
       }
	}
}
int main()
{
    int k;
    scanf("%d",&k);
    while(k--)
    {
        int i;
        memset(s,0,sizeof(s));//chushih
        memset(book,0,sizeof(book));
        sum=0;
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++)
        scanf("%d",&s[i]);//s数组存储物资
        dfs(0,1);//进行深搜
        printf("%d\n",sum);//输出结果
    }
    return 0;
}

时间: 2024-08-14 02:49:06

河南省ACM程序设计 物资调度的相关文章

第七届河南省赛A.物资调度(dfs)

10401: A.物资调度 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 95  Solved: 54 [Submit][Status][Web Board] Description 某地区发生了地震,灾区已经非常困难,灾民急需一些帐篷.衣物.食品和血浆等物资.可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁.国家立即启动应急预案,展开史上最大强度非作战空运行动,准备向灾区空投急需物资. 一方有难,八方支援.现在已知有N个地方分别

nyoj1249 物资调度 (第七届河南省程序设计大赛)

物资调度 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 某地区发生了地震,灾区已经非常困难,灾民急需一些帐篷.衣物.食品和血浆等物资.可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁.国家立即启动应急预案,展开史上最大强度非作战空运行动,准备向灾区空投急需物资. 一方有难,八方支援.现在已知有N个地方分别有A1,A2,-.,An个物资可供调配.目前灾区需要物资数量为M. 现在,请你帮忙算一算,总共有多少种物质调度方案. 假设某地方一旦被选择调配,则

河南省第七届大学生程序设计竞赛 问题 A: 物资调度【简单dfs】

题目描述 某地区发生了地震,灾区已经非常困难,灾民急需一些帐篷.衣物.食品和血浆等物资.可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁.国家立即启动应急预案,展开史上最大强度的非作战式的空运行动,准备向灾区投放急需物资.   一方有难,八方支援.现在已知有N个地方分别有A1,A2,….,An个物资可供调配.目前灾区需要物资数量为M. 现在,请你帮忙算一算,总共有多少种物质调度方案.假设某地方一旦被选择调配,则其物资数全部运走. 输入 第一行: K     表示有K组测试数据.

河南省第七届ACM程序设计大赛赛后总结

我们学校ACM集训开始于4月5号(清明节),5月25日在郑州解放军信息工程大学举办,集训耗时50天,但是感觉效果还行,但是也不是太好:我们也已经尽力了,虽然说只拿了个银牌,每份收获的背后,都会有辛勤的汗水,毕竟我们也努力了: 下面说说比赛中的问题:觉得吧,虽说模拟赛参加了很多,但是到了正式的比赛的时候,还是出现了紧张的情况,九点开始比赛,我们AC第一道题的时间是在十点半左右,题目不难而且曾经也做过啊,但是就是调试不好,越调试不好,心里就越急啊:刚开始看题的时间,我们都看了第一道题,意思也都明白,

没有什么不可能—记山东省第六届ACM程序设计竞赛(退役总结帖)

大一下学期,第一次听说了ACM这个词,当时每周六也开设了培训课,但我好像一次也没有去过,当时对这个词并没有什么太大的印象.后来学院里引进了自己的OJ,那时候我连基本的输入输出格式都不懂,当经历了一堆的WA,TLE之后突然换来的一个AC竟带来了莫名的喜悦.后来学院举办了第一届ACM程序设计竞赛,我报名参加了新秀赛和团队赛.三个小时的新秀赛,当时貌似做出了三道,意外的拿到了一等奖,这也成为了我大学生活的一个重要转折点.四个小时的团队赛,做得很艰难,各种不会,最后只做出了一道,排在三等奖的末尾.比赛之

记第五届山东省ACM程序设计比赛——遗憾并非遗憾

记第五届山东省ACM程序设计比赛 5月10日上午9点半左右,我们的队伍从学校出发,一个多小时后到达本次比赛的地点-哈尔滨工业大学. 报道,领材料,吃午饭,在哈工大的校园里逛了逛,去主楼的自习室歇息了一会.然后參加下午两点到四点的热身赛.不得不吐槽一下热身赛的题目,第一个题题目的数据范围写的是十的六次方,我们写出来提交怎么也不正确,后来快结束时看讨论板,管理人员说数据范围是十的九次方,无语了.第二个题目无输入,仅仅输出1到20之间的一个随机整数,题目上也明白说了是拼人品的题目,有的队伍"人品比較好

因为一个空格,就注定了结果——第五届山东省ACM程序设计比赛总结

应该来说这是一个很失败的结果,本届省赛铩羽而归.正如志愿者所说,打铁是一件很丢人的事情. 作为队长,完全没有想到会是这样的一次旅程.虽然因为去baidu的实习和各种offer的申请,对acm抱着能水就水绝不深究的敷衍态度.但之前着实还是参加了一些商业比赛,成绩都还可以,表面的繁盛更加放松了我的警惕.完全没有想到,正是线下赛的放松,使我线上赛的心态发生了重大的变化,并连锁反应了这一系列不理想的后果. 好多事情看起来完全是偶然因素,但是偶然中往往蕴藏着一些必然. 热身赛和去年一样,第二题是纯粹试人品

ACM程序设计学期总结

心路历程         大一的时候就跟着费老师学了近一个学期的ACM程序设计课程,但是由于种种出自于自己的原因,当时并没有完全塌下心去学,只是学到了些基础的东西,做的题太少,当然也并没有深入理解.大二又有了这个机会,自然不能放过,又认认真真重新学了一遍.         虽然这学期这门课一共只学了四个专题,但是对我来说,收获非常大,正像费老师说的:acm是思维的体操.它不停留在基本的语言层面,而是专注于解决各种实际问题的有一定难度的算法,它虽然会用到各种思想.各种工具,但是它不拘泥于某种固定的

记第五届山东省ACM程序设计比赛——遗憾并不是遗憾

记第五届山东省ACM程序设计比赛 5月10日上午9点半左右,我们的队伍从学校出发,一个多小时后到达本次比赛的地点-哈尔滨工业大学. 报道,领材料,吃午饭,在哈工大的校园里逛了逛,去主楼的自习室休息了一会.然后参加下午两点到四点的热身赛.不得不吐槽一下热身赛的题目,第一个题题目的数据范围写的是十的六次方,我们写出来提交怎么也不对,后来快结束时看讨论板,管理人员说数据范围是十的九次方,无语了.第二个题目无输入,只输出1到20之间的一个随机整数,题目上也明确说了是拼人品的题目,有的队伍"人品比较好&q