51nod 1636 教育改革
2020-04-01 18:40
176 查看
令f[i][j][k]为第i天选择的课程为j,设置作业为a[j]+k时的最大作业量.
那么f[i][j][k]可以由哪些状态转移而来?先把课程按复杂度排序,那么可以转移来的课程是f[i-1][t][r],
其中t是<j,且复杂度a[t].c严格小于a[j].c. 这是前提条件, 其次, 对于a[t]布置的作业数量r,根据题意需要满足作业j布置的作业(a[j]+k) % r == 0,或者是 (a[j]+k) - K = r. 在这些状态转移中取最值即可.
需要留意的地方:因为bi-ai<=100,也就是说布置的作业量的状态属于[ai,bi],所以我们用差值来记录布置了多少作业,没必要朴素的真的去记录布置作业量,因为ai<=10^16..太大了.
其次,要用long long, 各个地方都别漏了. 再其次,转移的时候,需要上一个状态合法,即上一个状态的值非0.
#include<bits/stdc++.h> using namespace std; #define ll long long #define FOR(i,a,b) for(int i=(a);i<=(b);++i) ll N, M, K, cas; struct node{ll l, r, c;} a[55]; bool cmp(node a, node b) {return a.c < b.c;} bool ok(ll v, node nd) {return nd.l <= v && v <= nd.r;} ll f[55][55][105], ans; int main () { while (~scanf("%lld%lld%lld", &N, &M, &K)) { ans = 0; memset(f, 0, sizeof f); FOR(i, 1, M) scanf("%lld%lld%lld", &a[i].l, &a[i].r, &a[i].c); sort(a + 1, a + 1 + M, cmp); FOR(i, 1, M) FOR(j, 0, a[i].r - a[i].l) f[1][i][j] = a[i].l + j; FOR(i, 2, N) { FOR(j, 2, M) { FOR(t, 1, j - 1) { if (a[j].c <= a[t].c) continue; FOR(k, 0, a[j].r - a[j].l) { ll pre = a[j].l + k - K; ll &cur = f[i][j][k]; if (ok(pre, a[t]) && f[i - 1][t][pre - a[t].l]) cur = max(cur, f[i - 1][t][pre - a[t].l] + a[j].l + k); pre = (a[j].l + k) / K; if ((a[j].l + k) % K == 0 && ok(pre, a[t]) && f[i - 1][t][pre - a[t].l]) cur = max(cur, f[i - 1][t][pre - a[t].l] + a[j].l + k); } } } } FOR(i, 1, M) FOR(j, 0, a[i].r - a[i].l) ans = max(ans, f [i][j]); if (ans) printf("YES\n%lld\n", ans); else puts("NO"); } return 0; }
转载于:https://www.cnblogs.com/Rosebud/p/9696263.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【51Nod - 1636】教育改革【DP】
- 51Nod 1636 教育改革
- 51nod 1636 教育改革(动态规划)
- 51Nod-1636-教育改革
- 51nod 1636 教育改革 | DP
- 51nod-1636-dp
- 51nod 1117 聪明的木匠(简单贪心)
- 51Nod-1203-JZPLCM
- Nim游戏的一个扩展——51nod 1661 黑板上的游戏+LA 5059 Playing With Stones
- 51nod 1033 骨牌覆盖 V2(矩阵快速幂)
- 51nod 1062【水题】
- 51nod-1380
- 51nod-1060 最复杂的数(反素数)
- Headshot UVA - 1636
- 51nod 1376 最长递增子序列的数量(线段树)
- 51Nod 1183 编辑距离 (DP
- 51Nod-1319-跳跃游戏
- 51nod 1043 幸运号码
- 51nod 1133【贪心】
- 51nod 1837 砝码称重