AtCoder Beginner Contest 055题解
生活随笔
收集整理的這篇文章主要介紹了
AtCoder Beginner Contest 055题解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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; }
轉載于:https://www.cnblogs.com/RUSH-D-CAT/p/6391086.html
總結
以上是生活随笔為你收集整理的AtCoder Beginner Contest 055题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优达学城数据分析师纳米学位——P3项目知
- 下一篇: Linux系统默默改变了人类世界的生活方