Untitled
unknown
plain_text
2 years ago
2.7 kB
6
Indexable
#include<iostream>
using namespace std;
int M,N;
int W[16];
int ans;
int Sum;
void backtrack(int k)
{
if(Sum > M) {
return;
}
if(k== N){
if(Sum > ans ){ ans = Sum;}
return ;
}
for(int i=0; i<2; i++){
if(i==0){
backtrack(k+1);
}
else {
Sum += W[k];
backtrack(k+1);
Sum -= W[k];
}
}
}
int main()
{
int t;
cin >> t;
for(int tc= 1; tc <=t; tc ++)
{
cin >> M >> N;
for(int i=0 ; i <N; i++)
{
cin >> W[i];
}
ans =-1;
Sum =0;
backtrack(0);
cout << "#" << tc << " " << ans<< endl;
}
return 0;
}
/////////////////////////////////////////////////
#include<iostream>
using namespace std;
int M,N;
int a[8][8];
int arr[8];
int ans;
bool safe(int r,int c){
for(int i=0;i<r;i++){
if(arr[i]==c)return false;
if(i-arr[i]==r-c)return false;
if(arr[i]+i==r+c)return false;
}
return true;
}
void backtrack(int k)
{
if(k== 8){
int sum=0;
for(int i=0;i<8;i++){
sum += a[i][arr[i]];
}
if(sum>ans)
ans=sum;
return;
}
for(int i=0; i<8; i++){
if(safe(k,i)){
arr[k]=i;
backtrack(k+1);
}
}
}
int main()
{
//freopen("Text.txt","r",stdin);
int t;
cin >> t;
for(int tc= 1; tc <=t; tc ++)
{
int n;
cin>>n;
cout << "Case #" << tc<<endl;
for(int u=0;u<n;u++){
for(int i=0 ; i <8; i++)
{
for(int j=0 ; j <8; j++)
{
cin >> a[i][j];
}
}
ans =0;
backtrack(0);
cout << ans<< endl;
}
}
return 0;
}
///////////////////////////////////////////////////////
#include<iostream>
using namespace std;
char M[4][4];
int N;
int ans =0;
bool check(int r,int c)
{
if(M[r][c] == 'X') { return false;}
for(int i=c-1; i>=0; i--)
{
if(M[r][i] == 'C') {return false;}
if(M[r][i] == 'X') {break;}
}
for(int i=r-1; i>=0; i--)
{
if(M[i][c] == 'C') {return false;}
if(M[i][c] == 'X') {break;}
}
return true;
}
void backtrack(int k)
{
if(k == N*N) {
int count_ =0;
for(int i=0; i<N; i++)
{
for(int j=0; j< N; j++)
{
if(M[i][j] == 'C') { count_ ++;}
}
}
if(count_ > ans ) { ans = count_;}
return ;
}
if(check(k/N,k%N))
{
for(int i=0; i<2; i++)
{
if(i==0) backtrack(k+1);
else{
M[k/N][k%N] = 'C';
backtrack(k+1);
M[k/N][k%N] = '.';
}
}
}
else backtrack(k+1);
}
int main()
{
int t;
cin >> t;
for(int stt=1; stt <=t; stt ++)
{
cin >> N;
for(int i=0; i<N; i++)
{
for(int j=0; j<N; j++)
{
cin >> M[i][j];
}
}
///////////////////
backtrack(0);
cout << "Case #" << stt << endl << ans << endl;
ans =0;
}
}Editor is loading...