首页 > 其他分享 >LOJ #2500. 「NOIP2014」飞扬的小鸟

LOJ #2500. 「NOIP2014」飞扬的小鸟

时间:2022-10-25 12:31:27浏览次数:75  
标签:tmp NOIP2014 min LOJ d% int cub inf 2500


题目链接:​​传送门​

不知不觉这么久没更了
上了一阵子文化课,还比较颓没怎么做题
就做了做noip历年的题
也没什么好发的
挑了一个,写了些注释

#include <bits/stdc++.h>
#define

using namespace std;
const int inf = 0x3f3f3f3f;
int n, m, k, d[A], u[A], pass, ans = inf;
int x[A], y[A], f[A][1010], tmp; bool cub[A];

int main(int argc, char const *argv[]) {
cin >> n >> m >> k; tmp = k;
for (int i = 0; i < n; i++) scanf("%d%d", &x[i], &y[i]), d[i] = 1, u[i] = m;
d[n] = 1; u[n] = m; //预先给每个位置设上边界
for (int i = 1, p, l, h; i <= k; i++) {
scanf("%d%d%d", &p, &l, &h); cub[p] = 1;
d[p] = l + 1; u[p] = h - 1; //不能碰到边所以+1 -1
}
memset(f, 0x3f, sizeof f);
for (int i = 1; i <= m; i++) f[0][i] = 0; //初始时在哪个位置都可以
for (int i = 1; i <= n; i++) {
for (int j = x[i - 1]; j <= m; j++) {
f[i][j] = min(f[i][j], f[i][j - x[i - 1]] + 1), //去掉第一维i之后就是完全背包的转移
f[i][j] = min(f[i][j], f[i - 1][j - x[i - 1]] + 1);
if (j == m) for (int k = m - x[i - 1]; k <= m; k++) //到顶的特判
f[i][j] = min(f[i][j], f[i][k] + 1), f[i][j] = min(f[i][j], f[i - 1][k] + 1);
}
for (int j = d[i]; j <= u[i]; j++) //从上一个位置掉下来
if (j + y[i - 1] <= m) f[i][j] = min(f[i][j], f[i - 1][j + y[i - 1]]);
for (int j = 1; j <= d[i] - 1; j++) f[i][j] = inf; //不能通过的水管
for (int j = u[i] + 1; j <= m; j++) f[i][j] = inf;
}
for (int i = n; i >= 1; i--) { //从后往前判断是否可到达这个水管
for (int j = d[i]; j <= u[i]; j++) if (f[i][j] < inf) ans = min(ans, f[i][j]);
if (ans != inf) break; //有能到的即可通过输出1
if (cub[i]) tmp--; //否则看最多通过多少水管
}
if (tmp == k) cout << 1 << endl << ans << endl;
else cout << 0 << endl << tmp << endl;
return 0;
}


标签:tmp,NOIP2014,min,LOJ,d%,int,cub,inf,2500
From: https://blog.51cto.com/lyle/5794495

相关文章

  • LOJ #10180. 「一本通 5.5 练习 1」烽火传递
    题目链接:​​传送门​​设表示处理到第个位置的最小花费很明显转移要从之前的个位置转移过来就是最后答案要取这样转移是的,但足以通过本题的正解是单调队列优化由于只......
  • LOJ #6175. 「美团 CodeM 初赛 Round B」黑白树
    题目链接:​​传送门​​一个很贪心的数位dp显然从叶节点开始染色是优的因为相比更靠上的节点来说会染到更多的节点那就先去染叶节点,在他的父亲节点处判断是否被覆盖如果......
  • LOJ #10005. 「一本通 1.1 练习 1」数列极差
    题目链接:​​传送门​​贪心题才是难的按照从小到大的顺序排,这样相乘会得到最大值,因为后面的最大值乘的更多最小值同理,就是从大到小处理就可以但是注意在操作的过程中不......
  • LOJ #3011. 「JOI 2019 Final」画展
    题目链接:​​传送门​​用最大的画框配最大的画显然是最优的那么挨个匹配就行#include<bits/stdc++.h>#defineusingnamespacestd;typedeflonglongll;pair<int,int>......
  • LOJ #2012. 「SCOI2016」背单词
    题目链接:​​传送门​​显然第一个情况和第二个情况不如第三个更优并且他们可以避免,所以尽量构造第三种情况将每个字符倒着插入trie树,因为先放后面的字符串是更优的然后......
  • LOJ #6208. 树上询问
    题目链接:​​传送门​​线段树维护每个点的k,t,d当做懒标记来维护这就需要对懒标记的理解了#include<bits/stdc++.h>#defineusingnamespacestd;typedeflonglongll;......
  • LOJ #6220. sum
    题目链接:​​传送门​​官方题解:有一个结论:必有连续的一串数和为n的倍数证明:先求个前缀和若这个前缀和中有的倍数,则这个前缀即为答案若这个前缀和中没有的倍数,即模余~......
  • LOJ #10202. 「一本通 6.2 练习 5」樱花
    题目链接:​​传送门​​​​别人的题解​​​不想写那么多latex了化完式子之后就是求的约数个数#include<bits/stdc++.h>#defineusingnamespacestd;typedeflonglong......
  • loj3053
    引言它还是来了。这题我尝试写过一次,寄了。然后开摆了。现在决定重新补一补这题。敬请收看:myee调长剖调到CSP还没有调出来的惨状!欢迎来看我什么时候补掉。当然也可......
  • loj3885. 「eJOI2022」Bounded Spanning Tree
    草稿:非树边\(u,v,[l,r]\)把\(u,v\)路径上所有边上界与\(r-1\)取个\(\min\)。剩下的边左端点排序后贪心,每次取右端点最小的一个元素。开始只考虑树边。当前加入一......