Tutorial of Popularziation
A
题出的不好
12 点到 1 点不会相交,24 点不计算
void solve(){int x, y, res;cin >> x >> y;res = y - x;if(x <= 11 && y >= 12) res --;if(y == 24) res --;cout << res << '\n';
}
B
题解有问题,题面也有问题
这是错误做法,但是通过了
#include<bits/stdc++.h>
using namespace std;
#define int long long
ifstream ifs;
ofstream ofs;
int n, m, x;
void solve(){ifs >> n >> m;int l = m, r = m;for(int i = 1; i <= n; i ++){ifs >> x;if(x == 2){if(l == r && l){l --;r --;continue;}else{if(l > r && l >= 2){l -= 2;}else if(r > l && r >= 2){r -= 2;}else{ofs << i - 1 << '\n';return;}}}if(x > l && x > r){ofs << i - 1 << '\n';return; }if(l > r){l -= x;}else{r -= x;}// ofs << l << ' ' << r << '\n';}ofs << n << '\n';
}
signed main(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);ifs.open("cake.in", ios::in);ofs.open("cake.out", ios::out);int T = 1;// ifs >> T;while (T --){solve();}return 0;
}
/*小时数
*/
这是 hack 数据,题解也没通过
4 7
4 3 5 2
f[i][j] 表示考虑到第 i 个元素, 左边恰好为 j, 右边的最低高度
全部初始化为 + ∞ +\infty +∞
f[1][h1] = 0
f[1][0]=h1
转移 : 当前蛋糕放到哪一边
for(int i = 2; i <= n; i ++){cin >> h;for(int j = 0; j <= m; j ++){// 放到左边f[i][j] = min(f[i][j], f[i - 1][j - h]);// 放到右边f[i][j] = min(f[i][j], f[i - 1][j] + h);}
}
答案 : 过程中更新
懒得去验证了,思路比较简单,数据范围也过不了
C
裸的二维费用背包
#include<bits/stdc++.h>
using namespace std;
#define int long long
ifstream ifs;
ofstream ofs;
int n, m1, m2;
int f[510][510];
int v1[1100], v2[1100], w[1100];
void solve(){ifs >> n >> m1 >> m2;for(int i = 1; i <= n; i ++){ifs >> v1[i] >> v2[i] >> w[i];}for(int i = 1; i <= n; i ++){for(int j = m1; j >= v1[i]; j --){for(int k = m2; k >= v2[i]; k --){f[j][k] = max(f[j][k], f[j - v1[i]][k - v2[i]] + w[i]);}}}ofs << f[m1][m2] << '\n';
}
signed main(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);ifs.open("wish.in");ofs.open("wish.out");int T = 1;// ifs >> T;while (T --){solve();}return 0;
}
/*小时数
*/
D
std 也有问题,题意说明也有问题,应该就是简单的 bfs
判定最深能到达哪一层