POJ崩了……不知道什么时候才能好,爷想交题啊…… 以下代码没交过,但dp能过样例应该就是对了吧.jpg POJ-1260 Pearls 题意:按顺序给出一些珍珠,后给出的一定比先给出的贵。每买一种珍珠除了购买数量的价钱,还必须付十颗珍珠的价钱。现给出要买珍珠的数量和价格,低级珍珠可以用高级珍
文章目录 基本算法数据结构 参考 基本算法 OJ上的一些水题(可用来练手和增加自信) (POJ 3299,POJ 2159,POJ 2739,POJ 1083,POJ 2262,POJ 1503,POJ 3006,POJ 2255,POJ 3094) 枚举. (POJ 1753,POJ 2965) 贪心(POJ 1328,POJ 2109,POJ 2586) 递归和分治法. 递推. 构造法.(P
#include<iostream> #include<cstring> using namespace std; #define maxn 100005 int par[2*maxn],height[2*maxn]; int Find(int x){ if(x==par[x])return x; else return Find(par[x]); } void Differ(int p,int q){ int parP = Find(p),parQ = F
题意:一些骑士要进行圆桌会议,每桌要坐奇数个人。互相憎恨的骑士不能相邻。现给出骑士之间的憎恨关系(双向),求删去多少人后,能正常开会。 解:将互相不憎恨的骑士连边,也就是补图。注意每个骑士一定不憎恨他自己(离散数学老师:和自己达成和解,这样挺好的)想想下学期就不能听他扯淡了还有点难过
#include<iostream> #include<cstring> using namespace std; #define maxn 30005 int par[maxn],n,m,k[505],data[505][30005]; bool visit[maxn]; int findPar(int x){ if(par[x]!=x)par[x] = findPar(par[x]); return par[x]; } int main(){ while
题意:住房终于包分配了!现有一张地图,人用m表示,房子用H表示。人每次上下左右走一格,到房子的距离为走的步数。现要使求一种方案,使得所有人到自己房子距离之和最少。输出最小距离和。 解:套路建图,人到房子花费为距离,流量随便,只要保证所有人到所有房子机会均等就行。这里我全设为1。写的
#include<iostream> #include<algorithm> using namespace std; struct node{ int v,b; }nd[25]; int cmp(node nd1,node nd2){ if(nd1.v>nd2.v)return 1; return 0; } int main(){ int i,j,n,c,sum,tmp; bool flag; scanf("%d%d
#include<iostream> #include<cmath> #include<cstring> using namespace std; int main(){ char a[80],d[]={'/','\\','.','|','_'}; int len; double sum; while(scanf("%s&q
#include<iostream> #include<cstring> using namespace std; int m,n,num; bool visit[100][100]; char data[100][100],ch; void dfs(int direction,int i,int j){ //direction=1向东,2向南,3向西,4向北 ch = (ch-'A'+1)%26+'A'; if(d
#include<iostream> #include<cstring> using namespace std; int data[105][205],a[3],len[105]; void Plus(int i){ int k,l; for(k=i-3;k<i;k++){ for(l=0;l<len[k];l++){ data[i][l] += data[k][l]; if(data[i
#include<iostream> #include<algorithm> using namespace std; int main(){ int t,n,data[1005],m,result,tmp1,tmp2; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++){
新学的差分约数系统,大概用来解决长成这样的问题: 如果不等号是小于,就换成小于等于。大于同理。 令所有x为结点,常数为边权连图: 符号为小于等于时,两点间最短路为两点差的最大值。 符号为大于等于时,两点间最长路为两点的差最小值。 注意如果不连通,则建一个源点,让它们强行联通。 题意:给
#include<iostream> #include<algorithm> using namespace std; int cmp(long long p,long long q){ if(p>q)return true; return false; } int main(){ int n,i,j; long long data[20005],result,tmp; scanf("%d",&n);
#include<iostream> #include<cstring> using namespace std; char ch[15][15]; int data[15][15],hasExit,hasLoop; int r,c,colNum,exitStep,loopStep; int main(){ while(scanf("%d%d%d",&r,&c,&colNum)==3&&r){ f
目录一基本算法C++的标准模版库的应用较为复杂的模拟题的训练 一基本算法 C++的标准模版库的应用 poj 3096 : hash poj 3007 : hash 较为复杂的模拟题的训练 poj 3393 : 咕咕咕 poj 3371 : 模拟
#include<iostream> #include<cstring> using namespace std; int n,k,total,m; char ch[10][10]; bool book[10]; void dfs(int cur){ if(m==k){ total++; return; } if(cur>=n){ return; } for(int i=0;i<n;
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int cnt; struct node{ char data[15]; int len; }Node[10]; bool decode(){ bool flag; int k; for(int i=0;i<cnt-1;i++){ for(int j=i+
#include<iostream> #include<algorithm> using namespace std; int main(){ int t,n,sum,data[20005]; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf(&qu
#include<iostream> #include<cmath> using namespace std; #define PI 3.14159265 int main(){ double D,d,s; int n,result; scanf("%d",&n); while(n--){ scanf("%lf%lf%lf",&D,&d,&s);
#include<iostream> #include<cstring> using namespace std; int main(){ int n,cnt,result; char a[100],b[100]; int dataA[26],dataB[26]; scanf("%d\n",&n); cnt = 1; while(cnt<=n){ gets(a); g
#include<iostream> using namespace std; int main(){ double a,b,c,f0,f1,f2,f3,f4,f5; while(scanf("%lf%lf%lf",&f0,&f1,&f2)==3){ c = f0; a = (f2-2*f1+f0)/2.0; b = f1-f0-a; f3 = 9*a+3*b+c;
打算尝试一种新写法 我愿叫它“蒟蒻的level++” 写下我的心路历程 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize transmission to others, the best
题意:求最小生成树最长边。 代码: 1 #include<stdio.h> 2 #include <algorithm> 3 #include <queue> 4 #include <math.h> 5 using namespace std; 6 #define ll long long 7 #define maxx 250005 8 #define inf 0x3f 9 const int mod=1e9+7; 10 //#defi
X的因子链 输入正整数 X,求 X 的大于 1 的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。 输入格式 输入包含多组数据,每组数据占一行,包含一个正整数表示 X。 输出格式 对于每组数据,输出序列的最大长度以及满足最大长度的序列
题意:青蛙想从一个点跳到另一个点,中途可以经过其他点。求起点到终点间所有路径中相邻两点最大距离的最小值。 解:所有最短路算法都可以,这里练了一下Floyd。将两点间最短路改成走到这一点上长度最小的最大值(好绕哦)。先计算出有直接边的距离,然后枚举每个点进行松弛,由于过程中要求最大