为了督促自己补题!以后都开博客记录!
本次比赛:牛客练习赛57
比赛地址:点我
时间:2020/1/11
共做出两题,最后卡在搜索。
睡过头,晚了半小时才开始打
A:签到题,按照题意模拟即可。
B:直接模拟超时,判断的话情况又太多,可以把中间的过程都跳过,让他们两个都保持血量大于0,再模拟即可。
C:刚开始写了个O(3
n
^n
n)的算法,分为选与不选,和放在下一个箱子。T了一发之后就开始摸鱼了。
优化:设现在已经使用了num个盒子,对于第step个物品,可以选择放在1-num个盒子中,若num < x也可以选择单独放在下一个盒子中。复杂度有点迷。
/// .-~~~~~~~~~-._ _.-~~~~~~~~~-.
/// __.' ~. .~ `.__
/// .'// \./ \\`.
/// .'// | \\`.
/// .'// .-~"""""""~~~~-._ | _,-~~~~"""""""~-. \\`.
/// .'//.-" `-. | .-' "-.\\`.
/// .'//______.============-.. \ | / ..-============.______\\`.
/// .'______________________________\|/______________________________`.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double pi = acos(-1);
namespace {
template <typename T> inline void read(T &x) {
x = 0; T f = 1;char s = getchar();
for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;
for(; isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);
x *= f;
}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i < (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
LL a[22], v[22];
LL n, x, w;
bool dfs(int step, int num) {
if(num > x) return 0;
if(step == n + 1) return 1;
for(int i = 1; i <= num; i++) {
if(a[step] + v[i] <= w) {
v[i] += a[step];
if(dfs(step + 1, num)) return 1;
v[i] -= a[step];
}
}
v[num+1] = a[step];
if(dfs(step + 1, num + 1)) return 1;
v[num+1] = 0;
return 0;
}
int main() {
int t;
read(t);
while(t--) {
read(n), read(x), read(w);
_rep(1, n, i) read(a[i]), v[i] = 0;
sort(a + 1, a + 1 + n);
reverse(a + 1, a + 1 + n);
if(a[1] > w) puts("No");
else if(n <= x) puts("Yes");
else {
if(dfs(1, 1)) puts("Yes");
else puts("No");
}
}
}
D:看了眼题目,题目描述很清晰。感觉马拉车能写,但是写不出来。题解用的是回文自动机,又能学一种自动机。学完来补。
开始时间:2020/1/11 9:38
E: