首页 > 代码库 > 轮胎充气

轮胎充气

#include<iostream>
using namespace std;
int m;
int limit;
int data[2][20];
int visit[20];
int flag;
int curp;
void DFS(int step,int curp)
{
    if(step==m)
    {
        flag=1;
        return;
    }
    for(int i=0;i<m;i++)
    {
        if(visit[i]==0)
        {
            visit[i]=1;
            int tmp0=curp;
            curp+=data[0][i];
            if(curp>limit)
            {
                visit[i]=0;
                curp=tmp0;
                continue;
            }
            else
            {
                curp-=data[1][i];
                if(curp<0)
                {
                visit[i]=0;
                curp=tmp0;
                continue;
                }
                else
                {
                    DFS(step+1,curp);
                    visit[i]=0;
                    curp=tmp0;
                }
            }
        }
    }
}
int main()
{
    freopen("input.txt","r",stdin);
    int ntc;
    cin>>ntc;
    for(int i=0;i<ntc;i++)
    {
        cin>>m>>limit;
        for(int i=0;i<2;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>data[i][j];
            }
        }
        for(int i=0;i<limit;i++)
        {
            for(int j=0;j<20;j++)
            {
                visit[j]=0;
            }
            flag=0;
            DFS(0,i);
            if(flag==1)
            {
                cout<<i<<endl;
                break;
            }
        }
            if(flag==0)
                cout<<-1<<endl;
    }
}


input:
5

3 100 
80 75 45 
95 30 55 

2 100 
65 90 
20 30

5 150 
35 105 100 45 75 
115 75 55 35 105 

7 150 
70 95 15 65 85 75 55 
105 80 10 90 115 110 45

8 200 
35 30 50 80 70 15 10 40 
70 20 20 85 65 40 25 50


output:
15
-1
25
-1
45

 

轮胎充气