![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM poj
sky_zdk
这个作者很懒,什么都没留下…
展开
-
poj 2393
题意:一个奶牛场,第i个星期需要向外提供牛奶Yi升,第i星期生产牛奶的成本是Ci ,但是本星期提供的牛奶可以是前几个星期就生产好的的(放在仓库里,每单位升牛奶每周需要S元的成本费),问共N周,所花的最少费用。思路:可以把存储在仓库的费用转化成那周的成本。假设S=5,第2周成本C2=80,第5周生产成本C5=100,如果要计算第5周的花费,(假如第5周的牛奶是从第2周来的),那么第2周的成本可以原创 2017-01-02 16:23:35 · 266 阅读 · 0 评论 -
poj 1017 装箱子问题
#includeint main(void){ int x1,x2,x3,x4,x5,x6,amount,x,y=0; //x1,x2,x3,.....代表1x1 ,2x2.....的箱子 while(~scanf("%d%d%d%d%d%d",&x1,&x2,&x3,&x4,&x5,&x6)) {原创 2017-01-02 20:41:09 · 403 阅读 · 0 评论 -
poj 3040 贪心
题意:有n种面额的硬币。且面值大的一定能被面值小的整除。现告诉你每种面值硬币的个数。和一个值c。每周支出的钱必须大于等于c。问钱最多能用多少周。 #includetypedef struct //定义一个结构v表示coin的面额,而n表示v面额纸币的钱数。{ int v; int n;}Coin;Coin coin原创 2017-01-03 09:38:31 · 244 阅读 · 0 评论 -
poj 1862 贪心
题意:从N个数任取两个数按2*sqrt(a*b)合成新数放回,求最后那个数的最小值。思路:贪心,每次取最大的2个数,计算结果后,再放回原来的数列中区,再排序,再取最大2个数,一直进行到只剩1个数#include#includedouble worm[111];void qsort(int l,int r) //快速排序 最好用优先队列(但是我不会用C写优先队列,C原创 2017-01-03 14:05:14 · 337 阅读 · 0 评论 -
poj 3262 贪心
题意:(翻译一遍)农夫J想要去砍树,留下N头牛,让他们吃草,当他返回的时候,使他焦虑的是 他发现那群牛正在吃他漂亮的花,为了使他接下来的 损失达到最小,他立刻采取行动,把牛赶回牛圈里。每头牛在距离牛圈Ti位置,而且,当牛在等待的时候,他每单位时间吃Di朵花,农夫J一次只能 赶一头牛,需要2*Ti时间(来回),问按照那种赶牛顺序可以使损原创 2017-01-03 15:51:07 · 497 阅读 · 0 评论 -
poj 2718(搜索+剪枝)C语言实现
题意:给你一串数字(不重复,且数字的个数在2-10之间),组成2个数字,求这2个数字差的绝对值的最小值,(其中不可以把0放在第一位比如一串数字0,2,4,5,不可以组成02,45这2个数。但可以组成20,45)思路:递归全排列。然后前后分成2部分,计算前后2部分大小和差值,再和min比较,如果小于,更新min的值。 剪枝(c++好像不用剪枝,直接用排列函数,暴力解就可以了,但是C不行)原创 2017-01-01 15:21:58 · 1325 阅读 · 1 评论 -
poj 3176
题意:金字塔形的保龄球中从顶往下撞击,每次只能撞击左下或右下两个,求所有撞到得分的最高值(撞到一个球,就加上其代表的分数)。#includeint max(int a,int b) //求2个数的最大值{ return a>b?a:b;}int main(void){ int i,j,N,max1=0; i原创 2017-01-04 14:04:42 · 397 阅读 · 0 评论 -
poj 2229 (动态规划,找规律)
题意:求把一个整数分解为2的幂的和共有几种方案f(1) (1)f(2) (1 1) (2)f(3) (1 1 1) (1 2)f(4) (1 1 1 1)原创 2017-01-05 08:30:06 · 439 阅读 · 0 评论 -
poj 3050 Hopscotch
题意:给你一个5x5的方格,你可以在任意点开始,走5步(上下左右4个方向,可以往回走,和迷宫不一样),把你走的每个方格上的数字按你走方格的顺序排列好(共6个数字,起始点也有一个),求有多少种不同的排列方式。思路:把每一个点dfs一遍,求总数,其中6个数字的排列可以转化成一个6位数,储存在一个数组里(我用amount[100000]存的),N代表有多少中可能。#includeint原创 2017-01-01 17:14:08 · 406 阅读 · 0 评论 -
poj 2376(贪心加快排)
#includetypedef struct { int front,rear;}Cow;Cow cow[25050];int max(int a,int b){ return a>b?a:b;}void qsort(int l,int r)//快速排序,l代表要排列数据的最左端(left),r代表要排列数据的最右端(right)原创 2017-01-01 19:24:02 · 464 阅读 · 0 评论 -
poj 3292 (打表)
题意:有类似4n+1的数(1,5,9,13,17.......),其中只有1和自己本身2个因数叫H-质数,而由2个H-质数乘积 得到的是H-合数,求0-n中,H-合数的个数。比如25=5X5 而5只有1和5这2个因数。 思路:可以知道如果某个数H-合数,那 #include#define MAX 1000001int vis[MAX],Num[MAX原创 2016-12-30 20:30:22 · 464 阅读 · 0 评论 -
poj 1995 快速幂
快速幂取模: 先写一些取模公式:p代表要取的模 1 (a+b)%p=(a%p+b%p)%p 2. (a – b) % p = (a % p – b % p) % p 3. (a * b) % p = (a % p * b % p) % p 4. (a^b) % p = ((a % p)^b) % p 5.. ((a+b) % p + c) % p原创 2016-12-30 13:31:51 · 433 阅读 · 0 评论 -
poj 1979
#include#define MAXN 40char maze[MAXN][MAXN];//代表迷宫int vis[MAXN][MAXN];//标记数组int mov[][2]={{0,-1},{-1,0},{0,1},{1,0}};//移动方向int N,M,count;//N代表行数,M代表列数,count用来计数void dfs(int x,int y)//深搜原创 2016-12-30 11:10:21 · 257 阅读 · 0 评论 -
poj 1002 487-3279
//思路:首先把一个字符串变成一个数字,比如ITS-EASY就变成4873297,000A-A-30变成2230 ,数组Num[i]代表数字i出现的次数//最后直接从头扫描一边,输出次数大于1的数字i.注意格式,可以用%03d-%04d来控制AC代码:#include#includeint num[25]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7原创 2016-12-26 08:23:11 · 226 阅读 · 0 评论 -
poj 3126 素数路径
题意:给你2个素数,你一次只能改变素数的一位的数字(共有4位,是4位数),并且改变成的数也是素数,问你最少通过几次改变,让第1个素数等于第2个素数。思路:用bfs,首先把给定的素数进入队列,然后穷举每位的变化,如果是素数加入队列,以此类推,到最后如果队列是空的话,就说明无解。 #include#include#includetypedef struct原创 2016-12-31 15:36:08 · 1069 阅读 · 0 评论 -
poj 1930 (循环小数转化分数)
//思路 简单起见我们不考虑整数位。首先循环小数有两种,纯循环小数和混循环小数,先考虑前一种。考虑小数,其中是一个n位整数.那么就可以写成分数求和形式,利用等比数列求和公式,(其中的α,β可以代表多位数(比如α=2,那么n=1, α=13,那么n=2,α=523,那么n=3,同理β和m的关系也是这样的))这时候结果就出来了,恰好是n个9,因此一个循环节长度为n的原创 2016-12-31 19:37:06 · 1149 阅读 · 1 评论 -
poj 3187
#include#includeint s[11],N,M,vis[11];int num[11][11];void dfs(int co){ int i,j; if(co==N+1) { for(i=0;i {原创 2017-01-01 16:06:30 · 342 阅读 · 0 评论 -
Find them, Catch them (poj1703)
Find them, Catch themTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 43890 Accepted: 13527DescriptionThe police office in Tadu City decides to say ends to原创 2017-02-27 21:18:25 · 231 阅读 · 0 评论 -
poj 2139Six Degrees of Cowvin Bacon
Six Degrees of Cowvin BaconTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5273 Accepted: 2484DescriptionThe cows have been making movies lately, so they原创 2017-02-28 17:38:24 · 354 阅读 · 0 评论 -
poj3259 Wormholes(最短路)
WormholesTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 48077 Accepted: 17756DescriptionWhile exploring his many farms, Farmer John has discovered a nu原创 2017-03-01 21:49:32 · 221 阅读 · 0 评论 -
单源最短路(Bellman-Ford) 实现代码
记从起点s出发到顶点i的最短距离为d[i],那么d[i]=min(d[i],d[j]+(边j到i的权值))struct edge//从顶点from指向顶点to的权值为cost的边{ int from,to,cost;};edge es[N]; //边int d[N];//从s顶点到各个顶点的最短距离,d[1]=s顶点到1顶点的最短距离,d[s]=0原创 2017-03-02 12:00:43 · 388 阅读 · 0 评论 -
poj3061 Subsequence
SubsequenceTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 13662 Accepted: 5776DescriptionA sequence of N positive integers (10 < N < 100 000), each of th原创 2017-03-03 15:18:11 · 175 阅读 · 0 评论 -
poj 3276 Face The Right Way
解题思路,就是对于每个k值,求其最小的移动次数m,然后比较大小,取其最小值。而对于某个特定的K,就是从头到尾检查序列,如果此时是B就对其反转(同时影响后面的k-1个),到最后,扫描到倒数第k+1个完毕,最后只剩下k个,要不都是B全部反转,要不全是F(不用反转),如果出现其它情况,那么反转k个,不能使序列全部变成F。#include#define N 5050int T;//序列长度int原创 2017-03-03 20:00:10 · 283 阅读 · 0 评论 -
poj 3279 Filptile
M代表横坐标,N代表纵坐标,res是最终的反转情况,tem是中间过程记录的某一种反转情况init是初始输入的数据。 #include#define MAX_N 16int init[MAX_N][MAX_N],res[MAX_N][MAX_N],tem[MAX_N][MAX_N];int M,N;int mov[][2]={0,0,0,1,0,-1,1,0,-1,0};原创 2017-03-04 09:18:30 · 389 阅读 · 0 评论 -
poj1742(背包问题)
#includeint dp[100010];int A[105];//钱币价值int C[105];//对应钱币的数量int main(void){ int n,m,i,j,ans=0; while((~scanf("%d%d",&n,&m))&&(n+m)!=0) { ans=0;原创 2017-02-24 21:58:50 · 416 阅读 · 0 评论 -
poj 2785 4 Values whose Sum is 0
#include#define N 4050int A[N],B[N],C[N],D[N],CD[N*N];void qsort(int l,int r)//快排{ int i,j,x; if(l<r) { i=l; j=r; x=CD[l]; while(i<j) { while(i=x) j--; if(i<j) CD[i++]=CD[j]原创 2017-03-04 15:55:31 · 277 阅读 · 0 评论 -
poj 3579 二分加尺取法
#include#define N 100000+16int d[N];int n;void qsort(int a[],int l,int r){ int i,j,x; if(l<r) { i=l; j=r; x=a[i]; while(i<j) { while(ix) j--; if(i<j) a[i++]=a[j]; wh原创 2017-03-17 14:53:57 · 232 阅读 · 0 评论 -
poj 3685 二分法(边界条件)
#includelong long int n,k,T;long long int cal(long long int i,long long int j){ return i*i+100000*i+j*j-100000*j+i*j;} int find(long long int x){ long long int ans=0,j,l,r,m; for(j=1;j<=n;j++原创 2017-03-17 17:48:20 · 390 阅读 · 0 评论 -
poj 2010 Moo University - Financial Aid
#include#define MAX_N 100000+16typedef struct{ int s,f; int rank;}Cow;int N,C,F,half;Cow cow1[MAX_N],cow2[MAX_N];void qsort1(int l,int r);void qsort2(int l,int r);int main(void){ int i,to原创 2017-03-17 20:07:35 · 511 阅读 · 0 评论 -
poj3046(动态规划)优化
#include#define Mod 1000000int dp[1010][100010]; //必须是全局变量,如果放在主函数里,就会超空间,运行错误int main(void) //dp[i][j]表示从前i种物品中取出j个的组合总数{ int T,A,S,B; int num[1010],ans=0,i,j,t;原创 2017-02-25 10:50:07 · 411 阅读 · 0 评论 -
C语言 poj1065
#includetypedef struct{ int l,r;}ST;ST stick[5005];void qsort(int l,int r)//快速排序(多重比较){ int i,j; ST x; if(l { i=l; j=r; x=s原创 2017-02-25 15:11:42 · 398 阅读 · 0 评论 -
C语言实现 poj3666(动态规划)
离散化b[n]a[i][j]=abs(a[i]-b[i])+min(a[i-1][k]) (k其中min(a[i-1][k]),在第2层循环中其实可以算(mn表示)下面是动态规划的图:a[n]b[n] 110122348322100126原创 2017-02-25 20:38:07 · 397 阅读 · 0 评论 -
poj 1759
#include#define exp 1e-6double d[1000+16];double A,res;int N;int judge(double x){ int i; d[0]=A; d[1]=x; for(i=2;i { d[i]=2*(d[i-1]+1)-d[i-2];原创 2017-03-18 08:15:23 · 292 阅读 · 0 评论 -
poj 2379 (快速建立素数表+尺取法)
#includeint prime[1500];void init(void){ int a[11000],i,j=0; for(i=0;i<11000;i++) a[i]=1; a[0]=0; a[1]=0; for(i=2;i<11000;i++) { if(a[i]) { for(j=i+i;j<11000;j+=i) a[j]原创 2017-03-18 14:50:35 · 524 阅读 · 1 评论 -
poj 2100 Graveyard Design
最近怎么都是用long long 我的编译器就不能运行。。。。。这道题用long long 就过了 我的vc++6.0 用 int 就wa#includeint main(void){ long long int log[100000][2],num=0,i,k; long long int n,front,rear,ans; while(~scanf("%lld",&n))原创 2017-03-18 16:11:35 · 445 阅读 · 0 评论 -
动态规划(完全背包的变形)
poj2392Space ElevatorTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 11437 Accepted: 5446DescriptionThe cows are going to space! They plan to achieve o原创 2017-02-26 12:50:56 · 544 阅读 · 0 评论 -
poj 3185 The Water Bowls 反转问题
#include#define INF 0x3f3f3f3f#define min(x,y) ((x>y)?(y):(x))int C[22];int cal(int init){ int f[25],res=0,i; memset(f,0,sizeof(f)); f[0]=init; for(i=0;i<20;i++) { if((f[i]+C[i])&1) {原创 2017-03-18 17:05:28 · 278 阅读 · 0 评论 -
poj 1222 反转问题 枚举(0ms 过)
看网上的解答,说什么高斯消元法。。。我现在还没看到那,反正这是挑战书上的缩减版原题我们可以先枚举第一行所有的翻转情况,才64种。之后第一行已经确定了,然后看第2行,如果第一行某个位置为1,那么在同一列的第2行这个位置必须反转。。(因为第一行已经确定,不能再反转了,而影响第一行的,也只有在同一列的第2行),这样我们可以确定了前N-1行,全部为0,最后单独检查最后一行,是否全部为0原创 2017-03-18 19:22:00 · 342 阅读 · 0 评论 -
poj 2674 Linear world
#includedouble p[35000][2];char na[35000][260];int N;int main(void){ double l,v,max,ans; int i,lo,res; char str[10]; while(~scanf("%d",&N)&&N) { scanf("%lf%lf",&l,&v); for(i=0;i<N;i++)原创 2017-03-18 20:55:20 · 346 阅读 · 0 评论 -
poj 2549 Sumsets
#include#define INF -0x3f3f3f3fint n;int d[1000+16];void qsort(int l,int r)//快排{ int i,j,x; if(l<r) { i=l;j=r;x=d[i]; while(i<j) { while(i=x) j--; if(i<j) d[i++]=d[j]; w原创 2017-03-19 14:15:15 · 283 阅读 · 0 评论