没看出来动规怎么做,看到n <= 20,直接一波暴搜,过了. #include<cstdio> #include<cstring> #include<algorithm> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 25; int g[MAXN][MAXN], a[MAXN], f[MAXN]; int vis[MAXN],…
这道题我一直按照往常的思路想 f[i]为前i个任务的最大空暇时间 然后想不出来怎么做-- 后来看了题解 发现这里设的状态是时间,不是任务 自己思维还是太局限了,题做得太少. 很多网上题解都反着做,那么麻烦干嘛 设f[i]为前i时间内的最大空暇时间. 这里是更新后来的状态,和以前不一样. 如果i为某个任务的开始时间,则 f[i+t-1] = max(f[i+t-1], f[i]) 也就是继承过去,取max 如果不是的话 f[i] = max(f[i], f[i-1] + 1) 加上获得的空暇时间…
P2196 挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束.设计一个挖地雷的方案,使某人能挖到最多的地雷. 输入输出格式 输入格式: 输入文件mine.in有若干行. 第1行只有一个数字,表示地窖的个数N. 第2行有N个数,分别表示每个地窖中的地雷个数. 第…
好久没有写博客了,今天水几篇博客 传送门 挖地雷这个题之前在  信息学奥赛一本通  上做过几乎一样的题,但是由于数据太水导致我当时过了,进而导致我昨天(4.28)考试丢了20分,今天写一篇题解 这个挖地雷我们首先要想一个问题(基本人人能想到): 看这个图,如果我们从4出发,假设能挖到10颗雷,那么我们从1或3出发肯定能挖到更多的雷,毕竟你不可能挖到的雷是负数个或者会丢失雷 那么我们就应该从没有入度的点开始,这貌似跟最短路差不多 思路: a: 1.从入度为0的点开始,若能更新它的出边的点则更新,然…
题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束.设计一个挖地雷的方案,使某人能挖到最多的地雷. 输入输出格式 输入格式: 输入文件mine.in有若干行. 第1行只有一个数字,表示地窖的个数N. 第2行有N个数,分别表示每个地窖中的地雷个数. 第3行至第N+1行表示…
https://www.luogu.org/problem/show?pid=2196 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束.设计一个挖地雷的方案,使某人能挖到最多的地雷. 输入输出格式 输入格式: 输入文件mine.in有若干行. 第1行只有一个数字,表…
题意 题目链接 Sol 早年NOIP的题锅好多啊.. 这题连有向边还是无向边都没说(害的我wa了一遍) 直接\(f[i]\)表示到第\(i\)个点的贡献 转移的时候枚举从哪个点转移而来 然后我就用一个\(n^2\)的算法过了一道\(n \leqslant 20\)的题??.. #include<cstdio> #include<algorithm> #include<vector> using namespace std; const int MAXN = 101; i…
传送门 解题思路 就是暴力!!! 没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保证不错过正确答案. 由于数据很水<21,所以放心暴力! AC代码 #include<iostream> #include<cstring> using namespace std; ][],maxx[]; ],sans[],now[],ans,nows; void dfs(int…
题目传送门 解题思路: 记忆化搜索,题目比较坑的地方在于,这是个有向图,给的边是单向边!!!!!!!! AC代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std; ],way[],ans = -,en[],ww; ][],vis[]; inline void to(int x) { ;i <= x; i++) en[i] = way[i]; } inline vo…
题目描述 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,20,20) 如果a<b并且b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c) 其它别的情况就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1) 这是个简单的递归函数,但实现起来可能会有些问题.当a,b,c均为1…