A.当a=1就把a改成14,b=1就把b改成14,然后比较a,b大小即可。
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int a, b; int main() { cin >> a >> b; if(a==1) a=14; if(b==1) b=14; cout << ((a>b)?"Alice":((a==b)?"Draw":"Bob")) << endl; } /* 比赛的时候的代码,狠智障地把题读错了。 但居然AC啦! 很迷啊~ #include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int NICO = 200000 + 10; int a, b; int main() { cin >> a >> b; int ans; if(a > b) ans = 1; if(a < b) ans = 2; if(a ==b) ans = 3; if(a==1&&b==13)ans = 1; if(a==13&&b==1)ans = 2; if(ans == 1) cout << "Alice"; if(ans == 2) cout << "Bob"; if(ans == 3) cout << "Draw"; } */
B. 数据范围这么小~ 直接暴力,用4重循环check,岂不美哉!
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int NICO = 200000 + 10; int n, m; char s1[60][60],s2[60][60]; int main() { cin >> n >> m; for(int i=0;i<n;i++) scanf("%s",s1[i]); for(int i=0;i<m;i++) scanf("%s",s2[i]); int ok = 0; for(int i=0;i<=n-m;i++) { for(int j=0;j<=n-m;j++) { int ac = 1; for(int a=i;a<i+m;a++) { for(int b=j;b<j+m;b++) { if(s1[a][b] != s2[a-i][b-j]) { ac = 0; } } } if(ac) ok = 1; } } cout << (ok?"Yes":"No") << endl; }
C.数据范围比较小的TSP,继续暴力!
不过这个dfs写得真心难看!
#include <iostream> #include <algorithm> #include <cstdio> #include <vector> using namespace std; const int NICO = 200000 + 10; vector<int> vec[100];int n, m; int res = 0, a[10]; void dfs(int used[], int x) { int ok = 1;used[x] = 1; for(int i=1;i<=n;i++) { if(!used[i]) ok = 0; } if(ok) {res ++;return;} for(int i=0;i<vec[x].size();i++) { int cur = vec[x][i]; if(used[cur]) continue; int b[10];for(int j=1;j<=n;j++) b[j]=used[j]; dfs(b, cur); } } int main() { cin >> n >> m; for(int i=1;i<=m;i++) { int a, b;cin >> a >> b; vec[a].push_back(b); vec[b].push_back(a); } dfs(a, 1); cout << res << endl; }
D.活生生的一个背包, ans[i][j][k]: 表示使用前i个物品,凑成j克a物质,k克b物质最小耗费。
ans[i][j][k] = min (ans[i-1][j-a[i]][k-b[i]] + c[i], ans[i-1][j][k]);(初始化:ans[0][0][0]=0,其它为INF)
如果追求简洁の美感,可以把i省略掉,降一下ans数组的维度。
ps:降低维度的时候记得改变j, k的循环方向!喵!喵!喵!
#include <iostream> #include <algorithm> #include <cstdio> #include <vector> using namespace std; const int INF = 10000007; int ans[402][402]; int n, ma, mb; int a[42],b[42],c[42]; int main() { for(int i=0;i<=400;i++)for(int j=0;j<=400;j++)ans[i][j] = INF; ans[0][0] = 0; cin >> n >> ma >> mb; for(int i=1;i<=n;i++) { cin >> a[i] >> b[i] >> c[i]; } for(int i=1;i<=n;i++) { for(int j=400;j>=a[i];j--) { for(int k=400;k>=b[i];k--) { ans[j][k] = min(ans[j][k], ans[j-a[i]][k-b[i]] + c[i]); } } } int res = INF; int A = ma, B = mb; while(A<=400&&B<=400) { res = min(res, ans[A][B]); A += ma; B += mb; } if(res == INF) cout << -1 << endl; else cout << res << endl; }