A
题目链接
暴力枚举所有二进制串,暴力匹配
#include<bits/stdc++.h>
#define rep(i,st,ed) for(int i=st;i<=ed;++i)
using namespace std;
const int N=53;
int a[3*N],ans[3*N];
int t,n,OK;
void dfs(int dep)
{
if(OK==1)
return;
if(dep==n+1)
{
rep(i,1,n)
{
int flag=0;
rep(j,1,n)
{
if(ans[j]==a[i+j-1])
{
flag=1;
break;
}
}
if(flag==0)
return;
}
rep(i,1,n)
cout<<ans[i];
cout<<endl;
OK=1;
return;
}
ans[dep]=0;
dfs(dep+1);
ans[dep]=1;
dfs(dep+1);
}
void solve()
{
OK=0;
cin>>n;
string bs;
cin>>bs;
rep(i,0,bs.size()-1)
{
a[i+1]=bs[i]-'0';
}
dfs(1);
}
int main()
{
cin>>t;
while(t--)
{
solve();
}
}
B
题目链接
假设物品A比物品B轻,且我拿走的A已知,那么我剩下的空间就要全部用来拿B,同伴应该尽量多地拿A(因为A轻,所以可以拿更多),有余力就拿B。只需要枚举我拿走多少A,就可以得到所有的方案,在其中取最大值即可。
#include<bits/stdc++.h>
#define rep(i,st,ed) for(int i=st;i<=ed;++i)
using namespace std;
int t,my,fol,na,nb,wa,wb,ans,c;
void solve()
{
ans=0;
cin>>my>>fol>>na>>nb>>wa>>wb;
if(my>fol)
swap(my,fol);//my is smaller
if(wa>wb)
{
swap(na,nb);
swap(wa,wb);//a is smaller
}
rep(a1,0,min(na,my/wa))
{
int b1=(my-a1*wa)/wb;
int a2=min(na-a1,fol/wa);
int b2=min(nb-b1,(fol-a2*wa)/wb);
ans=max(ans,a1+a2+b1+b2);
}
cout<<ans<<endl;
}
int main()
{
cin>>t;
while(t--)
{
solve();
}
}