Untitled

 avatar
unknown
plain_text
2 years ago
10 kB
11
Indexable
#include<iostream>
using namespace std;
int M, D;
int phut , giay , nl;
int A[10][2];
int minn;
bool kt;
void BT(int k,int time, int sum_nl,int sum_kc)
{
	if(time > minn ) {return ;}
	if(sum_nl > M) { return;}
	if(k == 5)
	{
		//cout << k << " " << A[k][0] << endl;
		if(time + (D- sum_kc) * A[k][0]  < minn && sum_nl + (D- sum_kc) * A[k][1] <= M) {
			minn = time + (D- sum_kc) * A[k][0] ;
			kt =false;
		}
		return;
	}
	for(int i=0 ; i<= D - sum_kc; i++)
	{
		BT(k+1, time + i* A[k][0] , sum_nl + i* A[k][1],sum_kc +i );
	}
}
int main()
{
	//freopen("Text.txt","r",stdin);
	int t;
	cin >> t;
	for(int stt =1; stt <= t; stt ++)
	{
		cin >> M >> D;
		for(int i=1; i<=5; i++)
		{
			cin >> phut >> giay >> nl;
			A[i][0] = phut *60 + giay;
			A[i][1] = nl;
		}
		///////////////////
	minn =100000000;
	kt = true;
	BT(1,0,0,0);
	if( !kt){
	cout <<"Case #" << stt << endl <<  minn / 60 << " " << minn % 60 << endl;
	}
	else cout << "Case #" << stt << endl << "-1" << endl;

	}

}
////////////////////////////////hugo
//#include<iostream>
//using namespace std;
//int M,N,sr,sc;
//int C,H,T;
//int Chay[200][2];
//int Ho[200][2];
//int Thoat[200][2];
//int Arr[20][20];
//int Arr_thoat[20][20];
//int diamond[20][20];
//int time_chay[20][20];
//bool visit[20][20];
//int f=-1,r=-1;
//int Qx[100000];
//int Qy[100000];
//int max_kt=0;
//int dx[4] ={0,0,1,-1};
//int dy[4]={-1,1,0,0};
//bool dich = false;
//void push(int x,int y)
//	{
//	f++;
//	Qx[f] =x;
//	Qy[f]=y;
//	}
//void pop(int &x,int &y)
//	{
//	r++;
//	x= Qx[r];
//	y= Qy[r];
//	}
//void bfs(int x,int y)
//	{
//	f=r=-1;
//	for(int i=1; i<=C; i++)
//		{
//		push(Chay[i][0], Chay[i][1]);
//		time_chay[Chay[i][0]][Chay[i][1]] =0;
//		}
//	while(f != r)
//		{
//		pop(x,y);
//		for(int i=0; i<4; i++)
//			{
//			int xx= x+dx[i];
//			int yy =y+dy[i];
//			if(xx>=1 && xx <=M && yy >=1 && yy <=N)
//				{
//				if(time_chay[xx][yy] >time_chay[x][y] +1 && Arr[xx][yy] !=2){
//					push(xx,yy);
//					time_chay[xx][yy] = time_chay[x][y] +1;
//					}
//				}
//			}
//		}
//	}
//void BT(int sr,int sc,int time ,int summ)
//	{
//		//cout << summ << endl;
//	if(Arr_thoat[sr][sc] == 3){
//		if(summ > max_kt) { max_kt = summ; }
//		dich= true;
//		//Arr_thoat[sr][sc] =0;
//		//return ;
//		}
//	for(int i=0; i<4; i++)
//		{
//		int xx= sr+dx[i];
//		int yy =sc+dy[i];
//		if((xx<1 && xx >M && yy <1 && yy >N) || visit[xx][yy]){
//			continue;
//			}
//		else {
//			int next_time;
//			if(Arr[xx][yy] == 2)  { next_time =time +2;}
//			else {  next_time = time +1;}
//			if(next_time < time_chay[xx][yy] ){
//				visit[xx][yy] =true;
//				BT(xx,yy,next_time,summ + diamond[xx][yy]);
//				visit[xx][yy] =false;
//				}
//			}
//		}
//	}
//int main()
//	{
//	int t;
//	cin >> t;
//	for(int stt=1; stt <=t; stt++)
//		{
//		cin >> M >> N >> sr >> sc;
//		for(int i=1; i<=M; i++)
//			{
//			for(int j=1; j<=N; j++)
//				{
//				visit[i][j] = Arr_thoat[i][j] = Arr[i][j]=0;
//				}
//			}
//		visit[sr][sc] = true;
//		cin >> C;
//		for(int i=1; i<=C; i++)
//			{
//			cin >> Chay[i][0] >> Chay[i][1];
//			}
//		cin >> H;
//		for(int i=1; i<=H; i++)
//			{
//			cin >> Ho[i][0] >> Ho[i][1];
//			Arr[Ho[i][0]][Ho[i][1]] =2;
//			}
//		cin >> T;
//		for(int i=1; i<=T; i++)
//			{
//			cin >> Thoat[i][0] >> Thoat[i][1];
//			Arr_thoat[Thoat[i][0]][Thoat[i][1]] =3;
//			}
//		for(int i=1; i<=M; i++)
//			{
//			for(int j=1; j<=N; j++)
//				{
//				cin >> diamond[i][j];
//			    time_chay[i][j] = 1000;
//				}
//			}
//		////////////////////////////////////////////////
//		bfs(0,0);
//		BT(sr,sc,0,diamond[sr][sc]);
//		if(dich == false){
//			cout << "Case #" << stt << endl << "-1" << endl;
//		}
//		else { cout << "Case #" << stt << endl << max_kt << endl;}
//		max_kt =0;
//		dich = false;
//		///////
//		}
//	}
///////////////////////////lk
#include<iostream>
using namespace std;
int N,M;
int market[30];
int Mang[35][1000];
int price_combo[35];
int tb_combo[35];
int tbmt[20];
int sotb_canmua;
int combo_canmua[20];
int price=0;
int minn= 10000000;
void buy(int k)
{
	price += price_combo[k];
	for(int i=1; i<= tb_combo[k]; i++){
		tbmt[Mang[k][i]] ++;
	}
}
void unbuy(int k)
{
	price -= price_combo[k];
	for(int i=1; i<= tb_combo[k]; i++){
		tbmt[Mang[k][i]] --;
	}
}

void BT(int k)
{
	if(price >= minn) { return; }
	if(k==M+1 ) {
			int price_market=0;
			for(int i=1; i<=sotb_canmua; i++)
		    {
			if(tbmt[combo_canmua[i]] ==0){
				price_market += market[combo_canmua[i]];
				cout << price << " " << price_market << " " <<minn << endl;
				if(price_market + price >= minn) { break;}
			    }
		    }
		    if(price_market +price < minn) { minn = price_market +price ;}
		return;
	}
	for(int i=0; i<2; i++)
	{
		if(i==0) { BT(k+1); }
		if(i==1){
            buy(k);
			BT(k+1);
			unbuy(k);
		}
	}
}
int main()
{
	int t;
	cin >> t;
	for(int stt=1; stt <=t; stt++)
	{
		cin >> N;
		for(int i=1; i<=N; i++)
		{
			cin >> market[i];
			tbmt[i] =0;
		}
		cin >> M;
		for(int i=1; i<=M; i++)
		{
			cin >> price_combo[i] >> tb_combo[i];
			for(int j=1; j<= tb_combo[i]; j++)
			{
				cin >> Mang[i][j];
			}
		}
		cin >> sotb_canmua;
		for(int i=1; i<= sotb_canmua; i++)
		{
			cin >> combo_canmua[i];
		}
		//////////////////////////////////////////
		BT(1);
		//cout << price << endl;//
		cout << "#" << stt << " " << minn << endl;
		price  =0;
		minn =10000000;
	}
}
////////////////sum 
#include<iostream>
using namespace std;
int S,N;
int M[100];
int save[100][100];
int lengt[100];
int summ=0;
int count_ =0;
int index_y=0;
int index_x=1;
void BT(int k)
{
	if(summ == S)
	{
		lengt[index_x] = index_y;
		count_ ++;
		cout << k << endl;
		for(int i=1; i<=index_y; i++)
		{
			cout << save[index_x][i] << " "; 
		}
		cout << endl;
		index_x ++;
		return;
	}
	if(summ > S || k>N) { return; }
	for(int i=0; i<2; i++)
	{
		if(i ==0){
			BT(k+1);
		}
		if(i ==1){
			summ += M[k];
			index_y ++;
			save[index_x][index_y] = M[k];
			BT(k+1);
			index_y --;
			summ -= M[k];
		}
	}
}
bool kt_diffient(int x1, int x2)
{
	if(lengt[x1] != lengt[x2]) { return true;}
	else{
		for(int i=1; i<=lengt[x1]; i++)
		{
			if(save[x1][i] != save[x2][i]) return true;
		}
	}
	return false;
}
int main()
{
	int t;
	cin >> t;
	for(int stt=1; stt <=t; stt++)
	{
		cin >> S >> N;
		for(int i=1; i<=N ; i++)
		{
			cin >> M[i];
		}
		/*for(int i=1; i<=N; i++)
		{
			for(int j=i+1; j<=N; j++)
			{
				if(M[j] > M[i])
					swap(M[i], M[j]);
			}
		}*/
		/////////////////////////////
		BT(1);
		/*for(int i=1; i< index_x; i++)
		{
			if(!kt_diffient(i,i+1)){
				count_ --;
			}
		}*/
		/*for(int i=1; i<= index_x; i++)
		{
			cout << lengt[i] << endl;
			for(int j=1; j<= lengt[i]; j ++)
			{
				cout << save[i][j] << " ";
			}
			cout << endl;
		}*/
		cout << "#" << stt << " " << count_ << endl;
		summ =count_ = index_x =index_y =0;
		
	}
}
//////////////////////////////////////////////////////
#include <iostream>

#define MAXN 16
#define MAX_QUEUE 10000

using namespace std;

int hugo[MAXN][MAXN];
int diamond[MAXN][MAXN];
int fireCnt, diamondCnt, exitCnt, lakeCnt;
int fire[MAXN][MAXN], lake[MAXN][MAXN], exitM[MAXN][MAXN];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
int N, M, xStart, yStart;
int ans;
int front, rear;
int Q[MAX_QUEUE];
bool check;
clock_t endT, startT;

void push(int x, int y)
{
	rear++;
	Q[rear] = x;
	rear++;
	Q[rear] = y;
}

int pop()
{
	front++;
	return Q[front];
}

void resetQ()
{
	front = -1;
	rear = -1;
}

void input()
{
	cin >> N >> M >> xStart >> yStart;
	for(int i = 1; i <= N; i++){
		for(int j = 1; j <= M; j++){
			hugo[i][j] = 0;
			diamond[i][j] = 0;
			fire[i][j] = 0;
			exitM[i][j] = 0;
			lake[i][j] = 0;
		}
	}

	int a, b;
	cin >> fireCnt;
	for(int i = 0; i < fireCnt; i++){
		cin >> a >> b;
		fire[a][b] = 1; // Lua
	}
	cin >> lakeCnt;
	for(int i= 0; i < lakeCnt; i++){
		cin >> a >> b; 
		lake[a][b] = 1; // Ho
	}
	cin >> exitCnt;
	for(int i = 0; i < exitCnt; i++){
		cin >> a >> b;
		exitM[a][b] = 1; // Loi ra
	}

	for(int i = 1; i <= N; i++){
		for(int j = 1; j <= M; j++){
			cin >> diamond[i][j];
		}
	}

}

void BFS_fire()
{
	resetQ();
	for(int i = 1; i <= N; i++){
		for(int j = 1; j <= M; j++){
			if(fire[i][j] == 1){
				push(i,j);
			}
		}
	}
	while(front != rear){
		int x = pop();
		int y = pop();
		for(int i = 0; i < 4; i++){
			int xx = x + dx[i];
			int yy = y + dy[i];
			if(xx < 1 || yy < 1 || xx > N || yy > M)
				continue;
			if((fire[xx][yy] == 0 || fire[xx][yy] > fire[x][y] + 1) && lake[xx][yy] != 1){ // cap nhat lai lua
				fire[xx][yy] = fire[x][y] + 1;
				push(xx, yy);
			}
		}
	}
}

void hugo_backTrack(int xCurrent, int yCurrent, int curDiamond)
{
	if(exitM[xCurrent][yCurrent] == 1){
		if(ans < curDiamond){
			ans = curDiamond;
			check = true;
		}
		//return; // tim den loi thoai van thu di tiep
	}

	for(int i = 0; i < 4; i++){
		int xx = xCurrent + dx[i];
		int yy = yCurrent + dy[i];
		if(xx < 1 || yy < 1 || xx > N || yy > M)
			continue;
		if(hugo[xx][yy] == 0){
			if(lake[xx][yy] == 1){
				hugo[xx][yy] = hugo[xCurrent][yCurrent] + 2;
				hugo_backTrack(xx, yy, curDiamond + diamond[xx][yy]);
				hugo[xx][yy] = 0;
			}
			else{
				if( hugo[xCurrent][yCurrent] + 1 < fire[xx][yy] || fire[xx][yy] == 0){
					hugo[xx][yy] = hugo[xCurrent][yCurrent] + 1;
					hugo_backTrack(xx, yy, curDiamond + diamond[xx][yy]);
					hugo[xx][yy] = 0;
				}
				else
					continue;
			}
		}
	}
}


int main()
{
//	freopen("input1.txt", "r", stdin);
	startT = clock();
	int T;
	cin >> T;
	for(int tc = 1; tc <= T; tc++){
		input();
		ans = 0;
		check = false;
		BFS_fire();
		if(lake[xStart][yStart] == 1)
			hugo[xStart][yStart] = 2;
		else
			hugo[xStart][yStart] = 1;
		hugo_backTrack(xStart, yStart, diamond[xStart][yStart]);
		if(check)
			cout <<"Case #" << tc << " " << endl << ans << endl;
		else
			cout <<" Case #" << tc << " " << endl << "-1" << endl;
	}
	endT = clock();
	double dur = (double)(endT - startT);
	cout << dur;
	return 0;
}
Editor is loading...