06 2016 档案
摘要:/* 之前一直不重视链表 (好吧说实话主要是看着板子都是指针就怂了T.T) 这道题比较基础 应用了链表的思想 数组模拟指针 遇到的问题就是跑着跑着光标跳到前面或者跳到后面 我们用next储存每个点下一个点在哪 这样我们不仅能往开头和结尾插入 中间任意一个地方都ok、 这题数据范围题目描述小了 0.0 */ #include #include #include #define maxn 10001...
阅读全文
摘要:/* 粘一下开始写的暴力吧 虽然没啥价值 */ #include #include #include #include #define maxn 100010 using namespace std; int n,type[maxn]; double k,c,w,v[maxn],ans; void Dfs(int p,double t,double m) { if(p==n+1) ...
阅读全文
摘要:/* Ti≤Tj+b意味Ti的最大值为Tj+b; Tj≥Ti-b意味Tj的最大值为Ti-b; 因此,根据题中给出的m个不等式,逐步调整各个Ti的最小值和最大值。 设high[i]为Ti当前的最大值,low[i]为Ti当前的最小值。 high[j]为Tj当前的最大值,low[j]为Tj当前的最小值。 若high[i]-high[j]>b,则high[i]=high[j]+b(根据Ti≤Tj+b),...
阅读全文
摘要:/* WTF 写了好久了 开始的时候题目读错了 建图建错了 搜索写的也不好 感觉会T 总之 第一次写的很low 贴一下吧 */ #include #include #include #define N 40 #define M 40 using namespace std; int n,g[N*N][N*N],a[5][M*M]; int num[5],ans,maxx,f[N*N]...
阅读全文
摘要:/* Bfs+Hash 跑的有点慢 但是codevs上时间限制10s 也ok */ #include #include #include #include #define maxn 10000010 using namespace std; int len; bool f[maxn]; string ls,rs; struct node { int step,place; st...
阅读全文
摘要:/* 这题并不难 思路很简单 但是 如果记忆化的话 是会跪掉的 我们可能想到用01维护下次往上还是往下 但是我们忽略了 “每个的高度不得高于起点高度” 可能之前记忆化记下的与现在用到的高度不一样 */ #include #include #include using namespace std; int n,m,g[110][110],f[110][110][2],ans,limit; int...
阅读全文
摘要:/* 一开始想到了简单的深搜 维护当前可用的mi数组 然后回溯用哪个 不断更新新产生的mi 这样的问题是 由于mi不断产生 搜索规模扩大 不好 不好 下面是奇丑的WA掉的代码 做个反面教材 */ #include #include #include using namespace std; int n,ans=0x3f3f3f3f,f[1055],s[1055],top,vis[1055]...
阅读全文
摘要:/* 开始没啥好的思路 暴力吧 T的太严重 加了k>n的特判 结果没数据…..然后又暴力生成了几组答案 打表 然而有没有数据 华丽的爆零了 正解 回溯+DP 回溯生成k数组 然后DP找最优解更新 */ #include #include #include using namespace std; int n,k,f[550],a[55],ans[55],Ans; void Judge()/...
阅读全文
摘要:/* 下标字典序最小 */ #include #include #include #define maxn 10010 using namespace std; int n,a[maxn],f[maxn],pre[maxn],len=1,k=1,ans[maxn],size; int main() { //freopen("maxxl.in","r",stdin); //fre...
阅读全文
摘要:/* 要求每个最优 即累加前k优解 注意不用去重 */ #include #include #include #define maxn 210 #define maxm 5010 #define maxk 60 using namespace std; int n,m,k,w[maxn],v[maxn],f[maxm][maxk]; int x[maxk],y[maxk],a,b,z,ans;...
阅读全文
摘要:/* 01背包第k优解问题 f[i][j][k] 前i个物品体积为j的第k优解 对于每次的ij状态 记下之前的两种状态 i-1 j-w[i] (选i) i-1 j (不选i) 分别k个 然后归并排序并且去重生成ij状态的前k优解 */ #include #include #include #define maxn 1010 using namespace std; int T,n,m,k,c...
阅读全文
摘要:/* 95 最后一个点T了 qian lv ji qiong 了 没学过树剖 听chx听xzc说的神奇的方法 Orz 首先求出每个计划的路径长度 这里写的倍增 然后二分答案 对于每个ans 统计>他的路径条数 tot 并维护最大差值 dec 并且对于每条不合法的路径维护每个点的经过次数 然后枚举点 如果经过次数==tot说明每一条不合法的都经过他 然后尝试把它建成虫洞 如果他对应边的权值>...
阅读全文
摘要:/* 维护区间最小值 数据不超int 相反如果long long的话会有一组数据超时 无视掉 ll int */ #include #include #include #define maxn 1000010 #define ll int #define inf 0x7fffffff using namespace std; ll n,m,num,a[maxn],falg; struct n...
阅读全文
摘要:/* 再来个题练练手 scanf longlong 有bug....... */ #include #include #include #define ll long long using namespace std; ll n,m,x,y,x0,g; ll f[3][3],a[3][3]; ll slow_mul(ll a,ll b,ll c) { ll ans=0; ...
阅读全文
摘要:/* 裸地矩阵乘法 矩阵很好想的 1 1 0 0 0 1 1 0 0 */ #include #include #include #define mod 1000000007 #define ll long long using namespace std; int T,n; ll f[4][4],a[4][4]; void mul(ll a[4][4],ll b[4][4]) { ...
阅读全文
摘要:/* 数字可以重复 显然想要最优的话是没有1的 我们列举几个看看规律 5-> 2*3 6-> 3*3 7-> 2*2*3 8-> 2*3*3 9-> 3*3*3 10的话我们分解成2个5 也就是2*2*3*3 也就是说若ai>=5我们就分成x*2+y*3 若ai==4我们就分成2*2 剩下的就不用分了 这样的话我们就把n分成了 x*2+y*3 且3越多...
阅读全文
摘要:/* 数字不重复 将一个正整数分解成若干的整数的和 数字不重复 且数字不相同 保证不重复的话 贪心策略是从2开始分 然后把最后剩下的数均匀分到后面 证明嘛 这里写的可能不是很严谨 对于一个n 如果我们先分解成了两个a1 a2 我们设 x为a2-a1 若x>=3显然我们把x拿出来 即变成 x a1 a2-x 这样会更优 然后我们要保证不重复 从2开始拆 每次+1 把剩下的给后面的每个+1 ...
阅读全文
摘要:/* 题目大体意思是两套系统好多导弹 怎样分配使得两个系统所拦截的最大半径之和最小 贪心:把距离1系统最远的 让2拦截 记好距离 然后按照距离1由远到近排序 对于每一个导弹 如果这之前的都给2拦截 则1的半径就是ri 2的半径则是前面所有的的max ans就是两者之和 我们O(n)的跑一边 边跑边维护min就好了 */ #include #include #include #includ...
阅读全文
摘要:/* 二分图 题目给出的是确定不连通的边 如果我们拿剩下的可能联通也可能不连通的边跑最大匹配 如果不是完美非配 也就是说把所有可能的边都认为是一定的 这样都跑不出来(不能匹配到每个点)那么一定不能确定任何一组 如果是完美匹配 就说明可能有能肯定的组合 接下来我们一条一条的删边 如果删完之后跑出来的不是完美匹配那么这一条边就是肯定的 最后记一下答案 拍一...
阅读全文

浙公网安备 33010602011771号