- 博客(70)
- 收藏
- 关注
原创 POJ位操作联系
从这个题发现,在我的计算机上,unsigned short也是占4个字节的,所以左移时要取模。#include<bits/stdc++.h>using namespace std;int n;int a,b;int main(){ scanf("%d",&n); while(n--){ scanf("%d%d",&a,&b); bool...
2020-04-22 11:16:52 80
原创 POJ大盗阿福
#include<bits/stdc++.h>using namespace std;int dp[100001];//dp[i]表示在前i家店中,能获得的最大值//在每家店都有两种选择,如果不偷这家店,则所能获得的最大值显然和前i-1家一样。 //如果偷这家店,则第i-1家一定不能偷,因此所能获得的最大值是前i-2家店的最大值//加上这家店可以偷的。 int N,K,n...
2020-04-22 09:34:46 135
原创 POJ登山
求以A[i]为结尾的最长上升子序列和以A[i]为开头的最长下降子序列即可。#include<bits/stdc++.h>using namespace std;int N,num[1001],dp1[1001],dp2[1001],ans;int main(){ cin>>N; for(int i=1;i<=N;i++) cin>>num[...
2020-04-20 21:59:51 183
原创 POJ最低通行费
一开始只看到了可以朝上下左右四个方向走,以为不能用递推了,其实加上时间限制之后就相当于只能朝右和下走了。懒得改,就索性递归了。#include<bits/stdc++.h>using namespace std;int dp[100][100];int x[2][2]= {{-1,0},{0,-1}};int N,m[100][100],v[100][100];int...
2020-04-20 21:30:38 153
原创 POJ装箱问题
把dp的维数写反了,看了半天我吐了。#include<bits/stdc++.h>using namespace std;int dp[31][20001],num[31];//dp[i][j]=1表示前i个物品放入可以产生剩余空间jint v,n,ans;int main() { cin>>v>>n; for(int i=1; i<=n...
2020-04-20 18:16:01 110
原创 POJ奶牛散步
本来我们是想求走N步有多少条路径,我们可以把所有路径归类为3种,第i步向上走,向左走,向右走。也就是dp[i]=l[i]+r[i]+u[i]。而所有第i步向上走的路径,又可以由第i-1步向左,右,上的路径得到。第i步向左走向右走的路径同理。于是我们就得到了递推公式。本来是应该用dp[1001][3]来递推的,但经过数学运算发现可以优化。类似之前的可除性之类的问题,把子问题的结果分类来存储。#i...
2020-04-20 17:05:44 412
原创 POJ滑雪
记忆化搜索的题目,没法用递推。#include<bits/stdc++.h>using namespace std;//dp[i][j]表示以(i,j)为终点的最长上升子序列的长度 int H,L,ans,dp[110][110],m[110][110];int x[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int f(int h,int l)...
2020-04-19 12:50:43 122
原创 POJ糖果
#include<bits/stdc++.h>using namespace std;int dp[110][110];//dp[i][j]是(前i个数的某种和)modk=j的最大值int N,K,num[110];int f(int w,int k,int j){ for(int i=0;i<k;i++) if((i+w)%k==j) return i;} ...
2020-04-18 16:50:32 156
原创 POJ计算字符串距离
类似求最长公共子序列。#include<bits/stdc++.h>using namespace std;int dp[1010][1010];//dp[i][j]表示A[i]和B[j]的最小编辑距离 int n;char s1[1010],s2[1010];int main(){ scanf("%d",&n); while(n--){ memset(d...
2020-04-18 12:17:11 126
原创 POJ数字组合
类似背包问题,注意这个题在题干中没有说清,比如 N=3,T=42 2 2 时,答案为三种。#include<bits/stdc++.h>using namespace std;//题意为n个数可以组合出多少个Tint dp[30][1010];//dp[i][j]表示前i个数最多可以组合出多少个j int n,t,num[30],ans;int main() { ci...
2020-04-17 15:57:32 236
原创 POJ采药
背包问题。下面来总结一下几种写法。#include<bits/stdc++.h>using namespace std;int dp[110][1010],dp1[1010];//dp[i][j]表示前i件物品装入容量为j的背包,所获得的总价值最大是多少 int w[110],v[110]; int T,M;//index是当前待选择的物品的索引,capacity是选择...
2020-04-16 21:49:11 130
原创 POJ最大子矩阵
#include<bits/stdc++.h>using namespace std;//按列压缩成一位数组,枚举所有的情况((N*(N+1)/2种),然后当成最大连续子序列来求int sum[110][110],dp[110];//sum[i]是前i行被压缩成的数组,节省计算时间//(类似要求A[i]到A[j]的和,用S[i]表示A[0]到A[i]的和,这样A[i]到A[...
2020-04-16 17:14:54 129
原创 POJ特殊密码锁
每个按钮只有两种状态,凹或者凸,一旦第一个按钮的状态确定,后面的按钮状态也随之确定,就类似于蝴蝶效应,所以一共只有两种情况,只需判别这两种情况是否成立,然后取其最小的次数。如果从第三位,第四位等等开始看也一样。每一个按钮都是靠后一个按钮来确定状态的,如果符合密码,则后一个按钮不动,若不符合,则后一个按钮翻转。我们所需做的就是让当前按钮之前的按钮都符合目的密码,当运行到最后一个按钮时,如果最后一...
2020-04-16 15:42:51 236
原创 POJ Divisibility
#include<bits/stdc++.h>using namespace std;//所有的可能为2^(n-1),但实际上,前i个数能否整除k,只和前i-1个数整除k//的余数有关。也就是说,不需要计算前i-1个数有多少种和,只需要判断能//产生多少种余数即可。并在此基础上,计算前n个数可以产生多少种余数,//于是时间复杂度为 O(nk)//子问题可以产生多个结果,...
2020-04-16 11:44:53 134
原创 POJ二维数组回型遍历
#include<bits/stdc++.h>using namespace std;int m[100][100];int H,L;//转一圈为一个周期,每个周期共四步,每步走完都判断是否到达终点 int main() { cin>>H>>L; for(int i=0; i<H; i++) { for(int j=0; j<L...
2020-04-16 10:18:12 153
原创 POJ PKU2506Tiling
注意n=0算1种,一直按0算的,我吐了。#include<bits/stdc++.h>using namespace std;int dp[300][1000],n;void sum(int *a,int *b,int *c) { //a+2*b放到c中 for(int i=0; i<990; i++) { c[i]+=a[i]+2*b[i]; if(c[i...
2020-04-15 23:51:59 174
原创 POJ Yogurt factory
模拟题。#include<bits/stdc++.h>using namespace std;typedef long long ll;int N,S;int cost[10001],demand[10001],produce[10001];long long ans;int main(){ cin>>N>>S; for(int i=0;i...
2020-04-15 11:11:11 85
原创 POJ公共子序列
#include<bits/stdc++.h>using namespace std;#define maxn 200/*dp[i][j]表示字符串A的i号位和字符串B的j号位之前的LCS的长度(i,j从1开始) 如果A[i]=B[j],那么显然dp[i][j]=dp[i-1][j-1]+1。如果不等,dp[i][j]=max(dp[i-1][j],dp[i][j-1])边...
2020-04-14 23:15:25 90
原创 POJ最长上升子序列
#include<bits/stdc++.h>using namespace std;int N,seq[1010],ans;int dp[1010];//dp[i]表示以seq[i]为结尾的最长上升子序列的长度 //dp[i]等于dp[k](k=1~i-1)中,满足seq[k]<seq[i]的里面,最大的再加1 int main(){ scanf("%d",&a...
2020-04-14 22:27:42 124
原创 POJ数字三角形
#include<bits/stdc++.h>using namespace std;#define maxn 100int n;int dp[maxn][maxn],f[maxn][maxn];int main(){ cin>>n; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ cin>...
2020-04-14 21:13:47 162
原创 POJ错误检测
#include<bits/stdc++.h>using namespace std;int n,jh,jl;int m[100][100];int h[100],l[100];pair<int,int> res;//记录有多少个奇数行,奇数列。如果均为0,则OK;如果均为1,则可以改变;//如果至少有一个大于1,则没办法。int main() { sc...
2020-04-14 18:32:04 189
原创 POJ Aggressive cows
这个题在确定距离求可以放多少头牛时,我假设了第一个摊位必放牛。感觉许多二分的题都可以类似这道题,做出一些“贪心”的假设。#include<bits/stdc++.h>using namespace std;int N,C;int stall[100001];int f(int d){ int now=0,next=1,ans=1; while(next<N){...
2020-04-14 15:56:04 94
原创 素因子分解
#include<bits/stdc++.h>using namespace std;int prime[100],pNum=0,res[100],k=0;bool num[100];void find_prime() { for(int i=2; i<100; i++) { if(num[i]==false) prime[pNum++]=i; for(in...
2020-04-14 10:44:16 368
原创 POJ Rails
判断出栈顺序是否合法的题。#include<bits/stdc++.h>using namespace std;int n,ru[1001],chu[1001];int main(){ while(scanf("%d",&n),n){ for(int i=1;i<=n;i++) ru[i]=i; while(scanf("%d",&chu[1...
2020-04-14 10:02:03 108
原创 POJ潜伏者
#include<bits/stdc++.h>using namespace std;char jm[110],yuan[110],yi[110],ch[26]={0},chuse[26];//对的情况很简单,关键就是什么时候failed//由于最后的目的是翻译加密字符,所以我们不妨找加密字符和原字符的对应//会出现两种错误:1.原信息中的多个字符对应了加密信息中的一个字符...
2020-04-13 23:41:03 98
原创 POJ蜜蜂
#include<bits/stdc++.h>using namespace std;long long dp[100];int main(){ int n,a,b; cin>>n; while(n--){ memset(dp,0,sizeof(dp)); cin>>a>>b; dp[a+1]=1; dp[a+2]=2...
2020-04-13 22:26:11 117
原创 POJ The Die Is Cast
#include<bits/stdc++.h>using namespace std;int H,L,ans;char m[60][60];int x[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};void dfsx(int h,int l) { for(int i=0; i<4; i++) { int hh=h+x[i][0],ll=...
2020-04-13 21:54:13 146
原创 POJ safecracker
题意是说有一种密码规则,将用五个字母表示一个数字,一个字符串VWXYZ,表示字母targetv - w2 + x3 - y4 + z5 = targetV、W、X、Y、Z分别表是五个字符,则字符的值为其在字母表中的编号(A=1,B=2,C=3…)。现在将给你一个目标数字,以及一个5到12位的字符串,用这5到12个字符中的其中5个字符组成字符串VWXYZ,表示出这个数字,求其字符顺序最大的结果...
2020-04-13 20:39:18 148
原创 POJ回文素数
这里由于多次判断一个大整数是否是素数,先打表会快很多。#include<bits/stdc++.h>using namespace std;int n,ans=0,pp[10000000],prime[100000],pNum;bool num[100000];void find_prime(int x){ for(int i=2;i<x;i++){ if(nu...
2020-04-13 19:10:48 127
原创 POJ河中跳房子
#include<bits/stdc++.h>using namespace std;int L,N,M;//总长为L,N个石头,移走M块int rock[50010];//证明一下为什么求的是上界:比如当最短距离是4时,需要移走2块,//当最短距离是5时,需要移走3块,但此时实际上的最短距离已经是6了//也就是移走3块时真正的最短距离。如果再增加到7,就需要移走4块了。...
2020-04-13 10:08:36 463 1
原创 POJ月度开销
#include<bits/stdc++.h>using namespace std;//N个数,分成M组(只能将相邻的数分成一组),使和最大的那个组,和尽可能的小 //把月数视为月度开销的函数 int N,M,spend[100100];int f(int cost){ int sum=0,fajo=1;//因为每次要等一个月不够放了,才算作一个月,所以最后一个...
2020-04-12 21:51:23 265
原创 POJ派
这题我吐了,思路和网线主管完全一样,调精度调了一年。#include<bits/stdc++.h>using namespace std;#define pi 3.141592653589793238462643383279502884197169399375typedef long long ll;int N,F,R;//N个派,F个朋友 double pai[1001...
2020-04-12 16:44:07 237
原创 POJ网线主管
一般的二分查找是在一个排好序的数组中,确定一个比较规则来查找。而这个题如果要把数组求出来显然会超时(10^12),我觉得这个题可以理解为“函数二分查找”,就是只给一个单调的函数f,在其中找y=f(x)对应的x。在这个题中,x就是要求的网线长度,最小是1,最大是最长的那根网线的长度,也就是我们在这个范围内查找。f(x)就是可以切成的网线段数。显然函数是单调递减的,我们要求的是f(x)=k的元素中...
2020-04-12 15:00:32 378
原创 POJ矩阵分割
#include<bits/stdc++.h>using namespace std;//先lower_bound,再上溯int L,T,W,H,R,N;int a[1000010];//a[i]表示i到i-1之间的矩形面积 long long size[1000010],sum,half;//size[k]表示k之前的矩形面积 int lower(long long*...
2020-04-12 10:46:40 183
原创 二分查找
int lower_bound(int *array,int first,int last,int value){ while(first<last){ int mid=first+(last-first)/2; if(array[mid]<value) first=mid+1; else last=mid; } return first;}
2020-04-11 10:45:35 109
原创 POJ二分法求函数的零点
#include<bits/stdc++.h>using namespace std;//f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121double f(double x){ return pow(x,5)-15*pow(x,4)+85*pow(x,3)-225*pow(x,2)+274*x-121;} //二分...
2020-04-09 20:34:30 212
原创 POJ查找最接近的元素
#include<bits/stdc++.h>using namespace std;int n,m;int num[100100];int main() { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&num[i]); scanf("%d",&m); while(m--){ ...
2020-04-09 20:18:02 197
原创 POJ Falling Leaves
#include<bits/stdc++.h>using namespace std;int n;char d[1000],temp;struct node{ int lson,rson; char data;}tree[1000];void build(int i,char ch){//i是应该插入的位置 if(tree[i].data==0){ tre...
2020-04-08 23:09:43 115
原创 POJ上楼梯
每次能跳k级,则第n级楼梯只能从第n-1到第n-k级楼梯跳上来。dp[n]=dp[n-1]到dp[n-k]的和。如果n<k,则可以从第0级到第n-1级中任意一级跳上来。dp[n]=dp[n-1]到dp[0]的和。其中,dp[0]=1,dp[1]=1。#include<bits/stdc++.h>using namespace std;const int maxn = 6...
2020-04-08 20:48:02 189
原创 POJ打印月历
#include<bits/stdc++.h>using namespace std;bool run(int y) { if(y%4!=0) return false; else if(y%100==0&&y%400!=0) return false; else return true;}int m1[12]= {31,28,31,30,31,30,3...
2020-04-08 18:43:56 174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人