题意概括:1.输入T(表示数据数)
2.输入电饭煲按钮(n)和煲饭需要时间(time)
3.输入n个按钮调控的时间
注意:输入时间单位为秒,且电饭煲不支持时间小于0或大于一小时。
样例输入
2
3 50
-10 10 60
1 50
20
样例输出
2 0
3 10
这里的代码用step[i]来记录第“step[i]”步调到了i这个时间点。
第一次发现数组还能用来这样记录!
0x3f3f3f3f的用法也是第一次接触。
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int mp[20];
int step[4000];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,time;
int i,v,tt;
cin>>n>>time;
for(int i=0;i<n;i++) cin>>mp[i];
memset(step,0x3f3f3f3f,sizeof(step));
queue<int> q;
q.push(0);
step[0]=0;
while(!q.empty())
{
v=q.front();
q.pop();
for(int i=0;i<n;i++)
{
tt=v+mp[i];
if(tt<0) tt=0;
if(tt>3600) tt=3600;
if(step[tt]<=step[v]+1) continue ;
step[tt]=step[v]+1;
q.push(tt);
}
}
for(i=time;i<=3600;i++)
{
if(step[i]!=0x3f3f3f3f)
{
break;
}
}
printf("%d %d\n",step[i],i-time);
}
}