BAPC 2014:Button Bashing(暴力+bfs)
2024-08-29 12:13:29
题意:
给出n,m,代表微波炉有n个按钮,要求达到总时间为m
然后给出n个数,代表n个按钮能增加的时间,问最少几步,能够使得按出的总时间大于等于要求的时间,并且相差最小
输出最小的步数与相差的最小值
要求,当总时间小于0时,时间为0,大于3600时,时间为3600
题意:
给出n,m,代表微波炉有n个按钮,要求达到总时间为m
然后给出n个数,代表n个按钮能增加的时间,问最少几步,能够使得按出的总时间大于等于要求的时间,并且相差最小
输出最小的步数与相差的最小值
要求,当总时间小于0时,时间为0,大于3600时,时间为3600
Sample Input
2
3 50
-10 10 60
1 50
20
Sample Output
2 0
3 10
AC代码:
#include<stdio.h>
#include<queue>
#include<string.h>
#define INF 0x3f3f3f3f
using namespace std;
int step[];
int a[];
int main()
{
int t,n,m,v,nt,i;
scanf("%d",&t);
while(t--)
{
memset(step,INF,sizeof(step));
queue<int>q;
scanf("%d%d",&n,&m);
for( i= ; i<n ;i++)
scanf("%d",&a[i]);
q.push();
step[]=;///记录步数
while(!q.empty())
{
v=q.front();
q.pop();
for( i= ; i<n ;i++)
{
nt=v+a[i];///时间点
if(nt<)
nt=;
if(nt>)
nt=;
if(step[nt]<=step[v]+)
continue;
step[nt]=step[v]+;
q.push(nt);
}
}
for( i=m; i<=;i++)
if(step[i]!=INF)
break;
printf("%d %d\n",step[i],i-m);
}
}
做题报告:
题意要理解清楚,要明白小于0为0,大于3600为3600,大胆暴力
最新文章
- renderman、arnold及全局光照
- event相关
- 【leetcode】Count Primes(easy)
- RadGridView标头分行
- MyBatis与Hibernate对比
- HDU 4160
- vector(相对线程安全) arryList(线程不安全)
- 《JavaScript 闯关记》之初探
- CSS border三角、圆角图形生成技术简介
- Java进阶篇(六)——Swing程序设计(下)
- OOP编程七大原则
- 逆FizzBuzz问题求最短序列
- linux 扩展文件系统
- 1.2:Properties
- Ajax写成绩批量录入
- KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结
- [World Final 2016] Branch Assignment
- mysql xtrabackup工具备份
- [Winform]无边框窗口悬浮右下角并可以拖拽移动
- es6解构赋值的几个用法