10.26 dp练习 采药dp中的01背包 最经典的问题了吧 problem 1048#include <iostream>#include <cmath>#include <cstdio>using namespace std;int f[1100][1100];int w[1100],v[1100];int main(){ int n,m; cin>>m>>n; for(int
大深坑 一些错误有大的 也有小的恩2017年10月25日 一道水题 NOIP T1难度 不幸WA了10个点 原因 在运算时没有进行特判 超出所需要的运算次数2017年10月24日 一道水题 NOIP T1难度 不幸WA了1个点 原因 特殊情况的特判 要多考虑几种情况 避免失误2017年10月22
题 订餐题意有几道菜可以选择着吃 对于吃的第i道菜 美味程度为a[i]*i 求连续吃k道菜的最大的美味值 处理前缀和 注意爆int#include <iostream>#include <cstdio>using namespace std;long long a[200001],s[200001];int main(){ freopen("dish.in","r",stdin);
浴谷八连测 Round#1 T1 n!在k进制下0的个数40分不用说了吧。。暴力+10进制的特判#include <iostream>using namespace std;int num[100];int main(){ int n,k; cin>>n>>k; if(k==10) { int ans=0,flag[6]={0,0,0,0,0,0}; for(i
欧拉函数 欧拉函数φ(n)φ(n) 正常做法直接求#include<iostream>#include<cstdio>#define ll long longusing namespace std;ll n,ans;int main(){ cin>>n;ans=n; for(ll i=2;i*i<=n;i++) { { while(
逆欧拉函数 难 φ(x)=x∏i=1n(1−1pi)φ(x)=x\prod_{i=1}^n(1-\frac{1}{p_i}) 逆推可得出x的关系式 x=φ(x)∗p1p1−1∗p2p2−1∗...∗pnpn−1x=φ(x)*\frac{p_1}{p_1-1}*\frac{p_2}{p_2-1}*...*\frac{p_n}{p_n-1} 然后 dfs//copy#include <cstdio>#i
chocolate 题意大概就是一根长度为n的巧克力,要分成全部为1的巧克力,问最多可能有多少次分出来的是相等的两段巧克力 不会,部分分 正解 找规律,可以发现ans=n-c(n),(c(n)为n的二进制数中1的个数)#include <cmath>#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>using
选数字 好难啊…… 一个矩阵,可以每一行或者每一列减去p,求k次操作后的最高RP值如果不会正解的话,最少是可以得到第三、四个点的分的,第一二个点可以随便的复杂度A掉正解?枚举取的行数 如果取了x行的话,那么一定取了k-x列(废话) 然后再操作的过程中,每一行或每一列都减P的话,对这一行或这一列的最值是没有影响的,所以可以过程中暂时不考虑减P造成的影响(最后要考虑) 因为我们是单独选的,没有考虑 行对
大数阶乘取模 水了90分。。。 如果不会正解的话,直接暴力拿分,无脑暴力可以拿到90分 正解分块打表暴力就是直接求阶乘然后取模。。。 加一个比较有用的特判:如果n>=p,那么n的阶乘的因子中一定有p,n的阶乘膜p一定等于0#include <iostream>#include <cstdio>using namespace std;long long n,p;int js(int n){ l
蜜汁最大完全平方数 以前有过类似的思路,就是奇数次方就减一,偶数次方就不管,然后最后快速幂统计一遍 这个题思路想出来就很简单,想不出来就完蛋 遇见了很多坑,先是long long ,没开long long结果得了5分。。。 然后是有一句应该是k=k>>1,结果写成了k>>1,结果k到了这里一直不变。。懵逼地调了好长时间。#include <iostream>#include <cstdio> using na
TB 16 10 29 PM T180分 最后两个点变态,没有初始序列,然后就不知道怎么输入了。。 前面点不算难,只不过原始序列中有三个同色球在一起的,比较坑,然后就算是模拟了, string里面有一些奇怪的函数,非常有用。。str.erase(pos,n); 删除从pos开始的n个字符str.insert(pos,s); 插入注意在消掉三个球之后看一下是否还可以继续消除#include<iostream>#includ
TB 16 10 29 AM T1两个时间,,求时间差,变态的是要求毫秒,所以会爆int,要乘1ll 有闰年什么的,还有什么“一三五七八十腊,三十一天永不差”…… 捣鼓了两个小时,最后80分,还是不会搞闰年……#include <iostream>#include <cstdio>using namespace std;unsigned long long ans=0;short mon[13]={0,31,28,3
天天和不可描述 不算难吧看到题就打算一步一步往前走,第一个左括号之前的全部输出,然后第二个左括号之前的反着输出,以此类推……但是这种思路很SB,完美的A掉没有括号嵌套的点,但是有嵌套的就会WA。。。重整思路?emmm 数着点左括号,记录每个左括号的位置,可以开一个栈来实现 然后读到右括号就开始把到前面的左括号之间的字符翻转。。。 然后?然后删除这个左括号继续进行上面的操作#include<iostream>
组合数 好简单啊…… 就是分解质因数 只需要分解2 和 5 因为只有2*5是等于10的 然后分子分母约掉 看最后对2和5的数量取min#include<iostream>#include<algorithm>#include<cstring>using namespace std;int t,n,m;long long sum[4],ans;long long p;void work
回型遍历 令f(n)为斐波那契数列第n项 求斐波那契数列的第f(n)项 【数据规模与约定】 对于70%的数据,1 ≤ n ≤ 10^5 。 对于100%的数据,1 ≤ T ≤ 10^3 ,1 ≤ n ≤ 10^100 样例输入 4 0 1 2 6 样例输出 0 1 1 21#include<cstdio>#include<cmath>#include<cstring>#i
【清北学堂】dwarf 本来写的60分的代码,结果得了75分 就是dfs深搜,SPFA都忘了,也没看出来 深搜看看是买这个物品还是换这个物品,比较一下价格 很简单不说了#include<iostream>#include<cstdio>#include<cstring> using namespace std;int n,m,p;struct H{ int v,a,b;}thing[100007]
【清北学堂】number 二分答案,先排一下序,再扫,同时搞一个指针倒着扫,计算比当前数小的数的个数,判断 蜜汁WA#include <iostream>#include <cstdio>#include <algorithm>using namespace std;long long k;int n,m;int num1[200001],num2[200001];int check(long long t)
度度熊与邪恶大魔王 dp… 因为防御力的范围很小,最大才是10,所以就可以枚举防御力,从1到10,然后如果防御大于等于造成的伤害的话就直接continue…如果防御小于伤害的话就砍,然后如果用这一个技能就把它砍死了,那么这就是使用晶石最少的技能,否则就通过前面的dp值推出当前的dp值(dp[i][j]=dp[i-mul][j]+con[k];) dp[i][j]表示防御力为j,打出i点伤害所需要的最少的晶石#inc
UER #2 手机的生产 挣扎了好久终于A了 大佬说这是一个模拟题,然后果断发现看不懂。。。 大佬给我们讲(fa)了(le)一(ti)下(jie),大概就是把这个表达式用 | 分开,分成每份只有 & ,然后对于只有”&&”的情况,k个fork()的表达式会有k种方案返回0,1种方案返回1(找规律)。最后从左到右计算i到tot的方案数(这应该是dp啊)#include <bits/stdc++.h>#define MOD
蛋疼度度熊 百度之星初赛B赛T6 先把这些线段以左端点升序排列,然后把重叠的,重合的,还有一些什么特殊的情况都处理出来,把连续的几段处理成一段(dalao说可以不处理) 然后开一个队列,从前往后压入队列,如果出现了断开的部分,就用m比较,如果小于m,就把m减去这一段的长度,然后压入队列,如果大于m,就弹出队首元素,增加m,直到这一段的长度小于m进行更新,在这期间,要不断的进行更新ans的值, 要注意的是一
【倍增】 luogu 1613 跑路 懒得贴题自己去看 一道倍增模板题,可以练习代码熟练度 开一个数组f[i][j][k]表示从i到j用2k2^k能否到达,然后枚举中间点,如果i到mid可以用2k−12^{k-1}步到达,mid到j可以用2k−12^{k-1}步到达,那么从i到j就可以用2k2^k步到达,代码如下 for(int mid=1;mid<=50;mid++) for(int i=1;i<=50;i+
【模板】 字符串哈希 哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。纯裸的模板题 因为要使字符串的哈希值各不相同,所以要取一些奇奇怪怪的质数进行MOD,比如19260817(逃) 常见的质数 1e9+7
Tyvj 小Y的问题 【问题描述】 有个孩子叫小 Y,一天,小 Y 拿到了一个包含 n 个点和 n-1 条边的无向连通图,图中的 点用 1~n 的整数编号。小 Y 突发奇想,想要数出图中有多少个“Y 字形”。 一个“Y 字形”由 5 个不同的顶点 A、B、C、D、E 以及它们之间的 4 条边组成,其中 AB、 BC、BD、DE 之间有边相连。 同时,无向图中的每条边都是有一定长度的。一个“Y
Tyvj 铺瓷砖 【问题描述】 有一面很长很长的墙。你需要在这面墙上贴上两行瓷砖。你的手头有两种不同尺寸的瓷 砖,你希望用这两种瓷砖各贴一行。瓷砖的长可以用分数表示,贴在第一行的每块瓷砖长度 为 A/B ,贴在第二行的每块瓷砖长度为C/D. 两排瓷砖从同一起始位置开始向右排列,两排瓷砖的第一块的左端的缝隙是对齐的。你想要知道,最短铺多少距离后,两排瓷砖的缝隙会再一次对齐。 【输入】
Good News And Bad News 扔链接跑 处理出来i之前的最大的dis,i之后的最大的dis,然后 if((min_aft[i]-dis[i-1]>=0)&&(min_dis[i-1]+dis[n]-dis[i-1]>=0))#include <iostream>#include <cstdio> using namespace std;long long dis[1000010],a[1000010],min_dis[1
匹配字符串 题意大概是这样的:有两个串吧,子串可以存在 ‘?’, ‘?’可以和任意字符匹配,然后还有一个母串,判断母串是否包含子串,也就是子串是否包含于母串 例如 子串:aa?bbcc 母串:aabbbcc 这就是符合要求的串思路大概是这样的这就是kmp啊,只是匹配的时候多了一个条件(当出现 ‘?’时直接跳过此位) 就是那层if里面加一个s[t2]=='?'代码大概是这样的#include <cstdi
lowbit 树状数组(lowbit) Time Limit:1000ms Memory Limit:128MB 题目描述 这天,LYK在学习树状数组。 当它遇到一个叫lowbit的函数时有点懵逼。lowbit(x)的意思是将x分解成二进制,它的值就是,其中k是最小的满足(x & )>0的数。(&是二进制中的and运算) LYK甚至知道lowbit(x
最小网络最大流 题目描述如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用。输入输出格式输入格式:第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。接下来M行每行包含四个正整数ui、vi、wi、fi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为
bzoj1066 蜥蜴 1066: [SCOI2007]蜥蜴Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3916 Solved: 1965[Submit][Status][Discuss]Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离
【USACO】杂务 (翻译来自洛谷) 题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作。尽早将所有杂务完成是必要的,因为这样才有更多时间挤出更多的牛奶。当然,有些杂务必须在另一些杂务完成的情况下才能进行。比如:只有将奶牛赶进牛棚才能开始为它清洗乳房,还有在未给奶牛清洗乳房之前不能挤奶。我们
【模板】 莫队算法 莫队算法??这个算法是由之前的国家队队长莫涛巨神(Orz….%%%)发明的,所以尊称莫队算法。莫队是啥??如果我们知道区间[L,R],就能在O(1)求出[L−1,R],[L+1,R],[L,R−1],[L,R+1]的话,那就可以用莫队算法了。莫队咋搞?? 1):排序,以左段点所在的块为第一关键字,以右端点为第二关键字 2):从左往右处理询问(离线) 3):不断调整l,r的位置
【Luogu】 P1726 上白泽慧音 这个题目名……感觉……很…… 很裸的一个tarjan吧…… 不说了,上代码(代码是谁)#include <bits/stdc++.h>using namespace std;vector <int> que[51000];int tim,ans,stc[51000],ps,out[51000],flag,dfn[51000],low[51000],clr[51000],ins[51000]
【模板题】 公路修建 ( Prim ) Build the road 题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便。为解决这一“行路难”的问题,政府决定修建公路。修建公路的任务由各城市共同完成。 修建工程分若干轮完成。在每一轮中,每个城市选择一个与它最近的城市,申请修建通往该城市的公路。政府负责审批这些申请以决定是否同意修建。 政府审批的规则如下: (1)如果两个或以上城
【模板】 欧拉路 欧拉回路 啥是欧拉路(欧拉回路)?? 如果给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,这条路称为欧拉路; 如果给定无孤立结点图G,若存在一条回路,经过图中每边一次且仅一次,那么该回路称为欧拉回路。 存在欧拉回路的图,称为欧拉图。欧拉路(欧拉回路)有啥用??一笔画问题 即寻找欧拉路或欧拉回路 裸的模板题 骑马修栅栏,很裸很裸很裸欧拉路(欧拉回路)怎么写??如果寻找欧拉回路,
【Luogu】 食物链 →→→ 题目 ←←←我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加continue; 我忘了加conti
【常用模板】 线段树区间操作 线段树 非常简单的线段树区间操作,比单点操作难那么一点点(一点点?)但是……似乎……并没有这么简单,这么多的子程序,检查比写都难,可我一直把想要求的区间左右端点和当前端点混着用,就一直不过,很尴尬#include#include using namespace std;int a[110000];struct tree{ long long l,r,sum,addi,len;}
【常用模板】 线段树单点操作 输入 第一行两个整数n,m,第二行n个整数表示初始时的数组A[ ]; 接下来m行,每行3个整数a,b,c,如果a=1,那么输出A[b]~A[c]中最大的数 若a=2,那么将A[b]改为c 输出 每行输出一个整数,对应每一个操作a=1超级简单的线段树模板题,一遍就过了,子程序太多,变量更多,容易搞混很尴尬,就在几周前的noip中,有一个dalao给我们得瑟说他会线段树,
【luogu】 P1880 石子合并 原题原题原题原题原题 先贴上错误代码。。。 ↓错误代码↓#include <iostream>#include <cstdio>#include <cstring> using namespace std;int f[1100][1100],f2[1100][1100],st[1100],a[1100];int main(){ memset(f,127,sizeof(f));
【常用模板】 混合背包 混合背包就是把完全、01、多重背包结合起来,循环时判断一下是什么背包就行,完全背包就用完全背包的模板来算,多重和01背包一起算 关键是为什么不能乘k,至今未解,乘了k之后20分,不乘k的话100分#include <iostream>#include <cstdio>using namespace std;int f[1100],p[1100],v[1100],w[1100];int ma
【noip 2016】 蚯蚓(earthworm) 100分程序,写了2天+1小时 →题目在这里← 大神就是厉害……写的程序居然看都看不懂,还有就是cena上过了但是luogu上一直是恶心的TLE 首先是考虑p=0时,数组大小开到了1100000,然后就是WA,改成了9100000之后终于坑到50分,然后开始考虑p≠0,经过神犇程序的一番洗脑,终于发现p=0和p≠0的区别就是不等于的时候需要处理时加上长的那一部分,处理完之后再减去,输出时再加上
【noip 2016】 蚯蚓(50分)(earthworm) 50分小程序,写了2天… 题目在这里,点不点看你 一个单调队列,写的都是p=0的点,考试的时候要是弄到这些分的话……不说了…… 羡慕AC的神犇啊,54行的满分程序,而我……#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using std::cin;using std::sort;i
【常用模板】 完全背包 完全背包…………#include <algorithm>#include <bitset>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <map>#include <iostream>#include <queue>#include <s
【常用模板】 多重背包 常用模板多重背包#include <algorithm>#include <bitset>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <map>#include <iostream>#include <queue>#include <s
【常用模板】 01背包 加优化的01背包模板#include <iostream>using namespace std;int w[210],v[210],f[210];int main(){ freopen("package.in","r",stdin); freopen("package.out","w",stdout); int n,m; cin>>m>>n; for
【noip 2005】 采药 题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如
【luogu】 P1433 吃奶酪 题目描述 房间里放着n块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处。 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块奶酪的坐标。 两点之间的距离公式=sqrt((x1-x2) * (x1-x2)+(y1-y2) * (y1-y2)) 输出格式: 一个数,表示要跑的最少距离,保留
【noip 2016】 组合数问题(problem) 杨辉三角形求组合数问题 原题点这里#include <iostream>#include <cmath>using namespace std;long long a[3100][3100];int f[3100][3100];int n,m,t,k;int main(){ cin>>t>>k; a[1][1]=a[2][1]=a[2][2]=1; for(i
【清北学堂】 死亡(death) M个位置可以打sif,N+1个人等着打sif,已知前N个人的时间,问第N+1个人什么时候才能打sif(不能插队,即必须按顺序来打sif) 输入N,M以及每个人所需要的时间;输出第N+1个人所需的时间用优先队列用优先队列用优先队列 队列用来存每个水龙头所需要的总时间,到了最后用了最少时间的水龙头就是第N+1个人所需等待的时间#include <iostream>#include <queu
【noip 2004】 合并果子 noip2016结束后的第一份代码……优先队列的练习 合并果子 原题在这里#include <iostream>#include <queue>#include <vector>using namespace std;priority_queue <int> que;int main(){ int n,x,tot=0; cin>>n; for(int i=1;