河南省第七届大学生程序设计竞赛 物资调度
来源:互联网 发布:建筑工程预算软件 编辑:程序博客网 时间:2024/04/30 07:14
问题 A: 物资调度
提交: 35 解决: 18
[提交][状态][讨论版]
题目描述
某地区发生了地震,灾区已经非常困难,灾民急需一些帐篷、衣物、食品和血浆等物资。可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁。国家立即启动应急预案,展开史上最大强度的非作战式的空运行动,准备向灾区投放急需物资。
一方有难,八方支援。现在已知有N个地方分别有A1,A2,….,An个物资可供调配。目前灾区需要物资数量为M。
现在,请你帮忙算一算,总共有多少种物质调度方案。假设某地方一旦被选择调配,则其物资数全部运走。
输入
第一行: K 表示有K组测试数据。
接下来对每组测试数据有2行,第1行: N M
第2行:A1 A2 …… An
输出
对于每组测试数据,输出一行:物资调度的总方案数
样例输入
2
4 4
1 1 2 2
4 6
1 1 2 2
样例输出
3
1
提示
2 ≤ K ≤ 8 1 < N ≤ 100 1< M ≤ 1000 1 ≤ Ai≤ 1000
所有数据都是正整数。输入数据之间有一个空格。假设给定的数据至少有一种调度方案。
提议概括:
有n个地方,每个地方都可以提供一定数量的物资。现在灾区需要m的物资,求有多少种方案。
解题分析:
以前见到的搜索的题型都是迷宫类的,而且我比较习惯用广搜,所以对于深搜的理解不是太深,通过这道题从新的对深搜理解了一边对其基本的原理、要素都有了新的认识。这道题相当于一个全排列问题,用深搜比较合适。
AC代码:
#include<stdio.h>#include<string.h>#define N 105int book[N], num[N], n, m, Count;void dfs(int sum, int step){ int i; if(sum == m){ Count++; return ; } if(step > n || sum > m) return ; for(i = step; i <= n; i++){ if(!book[i]){ book[i] = 1; dfs(sum+num[i], i); book[i] = 0; } }}int main(){ int i, T, sum; scanf("%d", &T); while(T--){ memset(book, 0, sizeof(book)); sum = Count = 0; scanf("%d%d", &n, &m); for(i = 1; i <= n; i++) scanf("%d", &num[i]); dfs(0, 1); printf("%d\n", Count); } return 0;}
阅读全文
0 0
- 河南省第七届大学生程序设计竞赛 物资调度
- 河南省第七届大学生程序设计竞赛 问题 A: 物资调度【简单dfs】
- 第七届河南省ACM大学生程序设计大赛 A.物资调度
- 河南省第七届程序设计大赛A.物资调度
- nyoj1249 物资调度 (第七届河南省程序设计大赛)
- 【第七届河南省赛】A.物资调度
- 2014年第七届河南省ACM大学生程序设计竞赛有感
- 关于河南省第七届ACM大学生程序设计竞赛的总结
- 我的河南省第七届ACM大学生程序设计竞赛总结
- 河南省第七届ACM大学生程序设计竞赛总结
- 河南省第七届ACM大学生程序设计竞赛 解题报告
- 河南省第七届大学生程序设计竞赛 问题 B: 海岛争霸
- 河南省ACM程序设计 物资调度
- 第五届河南省大学生程序设计竞赛 题解
- 河南省第九届大学生程序设计竞赛 题解
- 河南省第十届大学生程序设计竞赛
- 河南省第十届大学生程序设计竞赛 年终奖金
- 中南大学第七届大学生程序设计竞赛
- 二级java程序设计--集合与泛型
- 常用的几个进程调度算法
- android sdk和模拟器环境搭建(4)
- 虚拟机vm-tools填坑
- 方法基础概念学习
- 河南省第七届大学生程序设计竞赛 物资调度
- 深度学习模型、概念思维导图分享
- HDU6165-FFF at Valentine
- 关于hibernate在数据库中生成hibernate_sequence表时报错的解决方案
- 导入时如何定制spring-boot依赖项的版本
- 排序小结
- 基于Putty的远程登录操作Linux服务器的一些"套路"
- IEC 60335-1: 2001新标准的变化简介
- 堆和栈的区别(转过无数次的文章)