题目链接:

http://acm.nyist.net/JudgeOnline/problem.php?pid=1249

描述

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

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

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

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

 
输入
输入一个组数T。(0<T<10)
之后为N,M含义分别如题目描述。(0<N<=100,0<M<=1000)
之后有N个数字A1,A2,….,An表示N个地方每个地方的物资数。(0<Ai<=1000)
输出
对于每组测试数据,输出一行:物资调度的总方案数
样例输入
2
4 4
1 1 2 2
4 6
1 1 2 2
样例输出
3
1
来源 第七届河南省程序设计大赛
题意描述:
输入物资的堆数及所需调动的物资数、每堆物资数
计算并输出调度方案数
解题思路:
可以看成是有相同牌面的不同纸牌的排列,使用DFS的话,必定需要剪枝,因为全排列10张以上的牌速度就慢的可怕了(别说100张了),所以在搜索的时候向下传递i值,意即下次尝试的时候直接从后面取就行了,这样就避免了重复取牌。另外取的时候直接判断会不会超出限度,是的话直接剪掉。详见代码。
AC代码:
 #include<stdio.h>
#include<string.h>
void dfs(int step,int sum,int i);
int ans,n,v,book[],a[];
int main()
{
int T,i,z;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&v);
z=;//物资总和
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
z += a[i];
}
if(z <= v)
{
if(z<v)
printf("0\n");
else
printf("1\n");
continue;
} ans=;
memset(book,,sizeof(book));
dfs(,v,);//向下传递放牌位置,所需物资数,取牌位置
printf("%d\n",ans);
}
return ;
}
void dfs(int step,int sum,int i)
{
int j;
if(step==n+ || sum ==)
{
if(sum == )
ans++;
return;
}
for(;i<=n;i++)
{
if(sum < a[i])//必要剪枝
continue;
if(!book[i])
{
book[i]=;
sum -= a[i];
dfs(step+,sum,i+); book[i]=;
sum += a[i];
}
}
return ;
}

NYOJ 1249 物资调度(DFS+剪枝)的更多相关文章

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

    10401: A.物资调度 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 95  Solved: 54 [Submit][Status][Web Bo ...

  2. *HDU1455 DFS剪枝

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  3. POJ 3009 DFS+剪枝

    POJ3009 DFS+剪枝 原题: Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16280 Acce ...

  4. poj 1724:ROADS(DFS + 剪枝)

    ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10777   Accepted: 3961 Descriptio ...

  5. DFS(剪枝) POJ 1011 Sticks

    题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...

  6. DFS+剪枝 HDOJ 5323 Solve this interesting problem

    题目传送门 /* 题意:告诉一个区间[L,R],问根节点的n是多少 DFS+剪枝:父亲节点有四种情况:[l, r + len],[l, r + len - 1],[l - len, r],[l - l ...

  7. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  9. LA 6476 Outpost Navigation (DFS+剪枝)

    题目链接 Solution DFS+剪枝 对于一个走过点k,如果有必要再走一次,那么一定是走过k后在k点的最大弹药数增加了.否则一定没有必要再走. 记录经过每个点的最大弹药数,对dfs进行剪枝. #i ...

随机推荐

  1. type 命令详解

     type  作用: 用来显示指定命令的类型,判断出命令是内部命令还是外部命令. 命令类型: alias: 别名 keyword:关键字, shell 保留字 function:函数, shell函数 ...

  2. SpringBoot_02_servlet容器配置

    二.参考资料 1.Spring boot 自定义端口 2.Spring Boot的Web配置(九):Tomcat配置和Tomcat替换

  3. 房上的猫:HTML5基础

    一.W3C标准 1)W3C标准不是某一个标准,而是一系列的标准的集合,一个网页主要由三部分组成,即结构(Structure),表现(Presentation)和行为(Behavior) 2)不很严谨的 ...

  4. VS2010 Extension实践(3)——实现自定义配置

    在之前的两篇曾提到通过VSSDK(MSDN也叫VSX)来拓宽思路,实现一些MEF Extension所不能做到的功能,比如获取IVsUIShell服务来执行Command等等,这里我给各位看官展示如何 ...

  5. 一些JavaScript技巧

    1.获取浏览器的高度和宽度(不包括工具栏和滚动条): var w=window.innerWidth //现代浏览器 || document.documentElement.clientWidth / ...

  6. iOS pods-xxxx-frameworks.sh:permission denied问题

    找到Build Phases, 点开Embed Pods Frameworks 是不是看到了"${SRCROOT}/Pods/Target Support Files/Pods/Pods-f ...

  7. 一个简单JDK动态代理的实例

    动态代理的步骤: 创建一个实现了InvocationHandler接口的类,必须重写接口里的invoke()方法. 创建被代理的类和接口 通过Proxy的静态方法 newProxyInsatance( ...

  8. Linux(Cent OS7.2)下启动停止memcached方法及ps命令使用讲解

    Linux下,以Cent OS7.2为例,安装memcached后的启动方法很简单,这里我们使用yum源安装. 首先查找yum源版本库的memchaced安装包, yum list | grep me ...

  9. chrome调试工具高级不完整使用指南(优化篇)

    上一篇文章我们说了chrome调试工具的一些比较基础功能的用法,接下来我们要在这一篇文章中说一说,其他一些chrome调试工具的使用方法 2.1.5 Network模块 在netWork模块中,大致上 ...

  10. rabbitmq:centos7安装与python调用

    1.centos安装rabbitmq 官网下载或者yum list |grep rabbitmq搜索安装,官网是最新的版本 wget http://www.rabbitmq.com/releases/ ...