[USACO1.5]八皇后 Checker Challenge
https://www.luogu.com.cn/problem/P1219
#include <bits/stdc++.h> using namespace std; int a[200],b[200],c[200],d[200]; int tot,n; void queen(int i){ if(i>n){ if(tot<=2){ for(int k=1;k<=n;k++) cout<<a[k]<<" "; cout<<endl; } tot++; } for(int j=1;j<=n;j++){ if(!b[j]&&!c[i+j]&&!d[i-j+n]){ a[i]=j; b[j]=1; c[i+j]=1; d[i-j+n]=1; queen(i+1); b[j]=0; c[i+j]=0; d[i-j+n]=0; } } } int main(){ cin>>n; queen(1); cout<<tot<<endl; return 0; }
考前临时抱佛脚
https://www.luogu.com.cn/problem/P2392
#include <bits/stdc++.h> using namespace std; int pj[5],homework[30],dp[3000]; int main(){ int sum=0,t=0; for(int i=1;i<=4;i++) cin>>pj[i]; for(int i=1;i<=4;i++){ sum=0; for(int j=1;j<=pj[i];j++){ cin>>homework[j]; sum+=homework[j]; } for(int j=1;j<=pj[i];j++){ for(int k=sum/2;k>=homework[j];k--) dp[k]=max(dp[k],dp[k-homework[j]]+homework[j]); } t+=sum-dp[sum/2]; for(int j=1;j<=sum/2;j++) dp[j]=0; } cout<<t<<endl; return 0; }
马的遍历
https://www.luogu.com.cn/problem/P1443
#include <bits/stdc++.h> using namespace std; const int N=500; int d[N][N],n,m; int dx[8]={1,2,2,1,-1,-2,-2,-1},dy[8]={2,1,-1,-2,-2,-1,1,2}; void bfs(int i,int j){ queue<pair<int,int> >q; q.push(make_pair(i,j)); d[i][j]=0; while(q.size()){ pair<int,int>now=q.front(); q.pop(); for(int k=0;k<8;k++){ int nx=now.first+dx[k]; int ny=now.second+dy[k]; if(nx<1||nx>n||ny<1||ny>m||!(d[nx][ny]==-1)) continue; else { d[nx][ny]=d[now.first][now.second]+1; q.push(make_pair(nx,ny)); } } } } int main(){ cin>>n>>m; int i,j; cin>>i>>j; memset(d,-1,sizeof(d)); bfs(i,j); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) printf("%-5d", d[i][j]); cout<<endl; } return 0; }
奇怪的电梯
https://www.luogu.com.cn/problem/P1135
#include <bits/stdc++.h> using namespace std; const int N=250; int s[N],n,a,b,v[N]; void bfs(int a,int b){ if(a==b) {cout<<"0";return;} queue<pair<int,int> >q; q.push(make_pair(a,0)); while(q.size()){ pair<int,int> now=q.front(); v[now.first]=1; q.pop(); if(now.first+s[now.first]<=n||now.first-s[now.first]>=1){ if(now.first+s[now.first]==b||now.first-s[now.first]==b){ cout<<now.second+1; return; } else{ if(now.first+s[now.first]<=n&&!v[now.first+s[now.first]]){ q.push(make_pair(now.first+s[now.first],now.second+1)); v[now.first+s[now.first]]=1; } if(now.first-s[now.first]>=1&&!v[now.first-s[now.first]]){ q.push(make_pair(now.first-s[now.first],now.second+1)); v[now.first-s[now.first]]=1; } } } } cout<<-1; } int main(){ cin>>n>>a>>b; for(int i=1;i<=n;i++) cin>>s[i]; bfs(a,b); return 0; }