网站搭建与服务器配置,网站建设维护需要作假吗,莱芜网站优化,全球电子元器件采购平台1/20赛后总结
T1『讨论区管理员』的旅行 - BBC编程训练营
算法#xff1a;IDA*
分数#xff1a;0
damn it!
Ac_code走丢了~~#xff08;主要是没有写出来#xff09;~~
T2华强买瓜 - BBC编程训练营
算法#xff1a;双向DFS或者DFS剪枝
分数#xff1a;0
Ac_code…1/20赛后总结
T1『讨论区管理员』的旅行 - BBC编程训练营
算法IDA*
分数0
damn it!
Ac_code走丢了~~主要是没有写出来~~
T2华强买瓜 - BBC编程训练营
算法双向DFS或者DFS剪枝
分数0
Ac_code:
#includebits/stdc.h
using namespace std;
int n,m,a[35],ansINT_MAX;
unordered_mapint,int mp;
//乘以2以避免除以2的问题
void dfs1(int step,int sum,int num){//从起始条件进行DFS劈第1~n/2个瓜
//step:劈到了第几个瓜、sum:劈了多少斤的瓜、num:劈了几个瓜if(stepn/21){if(mp.count(sum))mp[sum]min(num,mp[sum]);//保证答案最优else mp[sum]num;//记录答案return;}if(summ*2) return;//如果那的瓜过多那就退出dfs1(step1,suma[step]*2,num);//不劈直接拿dfs1(step1,suma[step],num1);//批了拿一半dfs1(step1,sum,num);//不劈不拿
}
void dfs2(int step,int sum,int num){//从最终条件进行DFS劈第n/21~n个瓜if(mp.count(m*2-sum)!0/*两边的DFS的和可行就纪录*/)ansmin(ans,nummp[m*2-sum]);//答案可行就记录if(stepn1/*如果打算劈n1个瓜时退出*/||numans/*如果答案不够优就不再进行*/)return;dfs2(step1,suma[step]*2,num);//不劈直接拿dfs2(step1,suma[step],num1);//批了拿一半dfs2(step1,sum,num);//不劈不拿
}
int main(){cinnm;for(int i1;in;i)cina[i];sort(a1,an1);dfs1(1,0,0);//从起始条件进行DFS劈第1~n/2个瓜dfs2(n/21,0,0);//从最终条件进行DFS劈第n/21~n个瓜if(ansINT_MAX)coutHuaqiang is about to strike you !;else coutans;return 0;
}T3花花的桃花源记 - BBC编程训练营
算法BFS优化
分数0
Ac_code:
#includebits/stdc.h
using namespace std;
struct node {int x,y;int t;int l;//是否拥有举世无双HJM很剑
} st,ed;
bool operator (node x,node y) {return x.ty.t;
}
priority_queuenodeq;
int n,m;
char a[1005][1005];
int dx[5] {0,0,0,1,-1};
int dy[5] {0,1,-1,0,0};
int vis[1005][1005][2];
int chuan[2];
void check(node v){if(vis[v.x][v.y][v.l]v.t){//保证出现在队列过的是最优解 vis[v.x][v.y][v.l]v.t; q.push(v);//放入队列 }
}
void jian(node v){if(chuan[v.l]) return ;chuan[v.l]1;//在有举世无双HJM很剑和没举世无双HJM很剑时只要传送一次就是最优的 v.t1;for(int i1;in;i){for(int j1;jm;j) {if(a[i][j]!X) continue;//不是间隙就不传送check({i,j,v.t,v.l});//如果是间隙那检查传送时是否最优 }}
}
int bfs() {q.push({st.x,st.y,0,0});while(!q.empty()) {node tq.top();q.pop();if(t.xed.xt.yed.y) return t.t;//到达祭台 for(int i1; i4; i) {int nxdx[i]t.x;int nydy[i]t.y;//向四个方向扩展 if(nx1||ny1||nxn||nym) continue;//判断是否出界node vt;v.xnx,v.yny;char taa[nx][ny];if(ta0){//空地 v.t1;check(v);}else if(ta1){//墙 if(v.l1){//有剑a[nx][ny]0;v.t1;check(v);} }else if(ta2){//Ultra怪(不用考虑是否会再生)if(v.l1) v.t1;else v.t3;check(v);}else if(ta3){//Super怪 if(v.l1) v.t1;else v.t11;check(v);}else if(ta4){//举世无双HJM很剑 v.t1;check(v);if(!v.l) v.l1,v.t4;check(v);}else if(ta5){//栈道 if(v.l0){v.t1;check(v);}}else if(taX){//间隙 v.t1;check(v);jian(v);}}}return -1;}
void solve() {while(!q.empty()) q.pop();//清空队列memset(vis,0,sizeof vis);memset(a,0,sizeof a);memset(chuan,0,sizeof chuan);memset(vis,0x3f,sizeof vis);//求最小值故memset为0x3f3f3f3f//多测不清空亲人两行泪 cinnm;for(int i1; in; i) {char chgetchar();for(int j1; jm; j) {a[i][j]getchar();if(a[i][j]S) st.xi,st.yj,a[i][j]0;//起点可多次经过 else if(a[i][j]E) ed.xi,ed.yj,a[i][j]0; }}int tmpbfs();if(tmp!-1) couttmpendl; else coutMaybe Next Timeendl;
}
int main(){int T;cinT;while(T--) solve();return 0;
}
T4Squars - BBC编程训练营
算法DFS剪枝
分数33骗的
Ac_code走丢啦主要是写不出来