自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

dyt's Blog

ふけるものすべてを渡り、永遠と戦うとき、あなたは私の旗です。

  • 博客(22)
  • 收藏
  • 关注

原创 BZOJ1079: [SCOI2008]着色方案

题解这题是DP,一开始的想法是写一个5^15的dp,但是肯定会超时,所以就要换一个定义。 我们开dp数组 f[a][b][c][d][e][last] 记录剩下1,2,3,4,5次可涂色次数的颜色的油漆种数为a,b,c,d,e,上一次我们涂的是使用次数剩余为last的颜料。这次在剩余last-1次的颜料中,我们只能少拿一次,那么就可以推出转移式子,用记忆化dfs求解。#include

2018-01-22 16:37:43 238

原创 BZOJ1012: [JSOI2008]最大数maxnumber

题解线段树= = 代码如下:#include#includeusing namespace std;const int maxn=200005;int n,tt,tail;long long las;struct dyt{ int l,r,w;}tree[4*maxn];inline int read(){ int x=0; char ch=getch

2018-01-21 21:10:24 178

原创 BZOJ1003: [ZJOI2006]物流运输

题解:这题显然是n次最短路加上dp,水题,就是代码有些繁琐。。。 代码如下: 然而并没有

2018-01-21 21:01:31 172

原创 BZOJ1008: [HNOI2008]越狱

题解这题显然是数学题,组合数学。正难则反,先考虑不会越狱的情况:第1个犯人信仰某宗教,一共m个选择。第2个则只有m-1个选择,… ,往后均为m-1个选择。所以答案易知,就是mn−m∗(m−1)n−1。快速幂套mod就行了。

2018-01-21 20:58:46 178

原创 BZOJ1293: [SCOI2009]生日礼物

这题和noip2016普及组的第三题类似啊= =,直接哈希动态做一下就好了。 代码如下:#include#include#includeusing namespace std;const int maxn=1000005;int n,m,n1,tail,ans,hsh[maxn];struct dyt{ int x,id; bool operator cons

2018-01-21 20:15:59 210

原创 BZOJ2456: mode

题解:这题还是蛮有意思的,因为内存上限只有1m,所以不能开数组处理。我们发现题目中的众数是大于n/2的,所以我们可以只存一个量,每次读入不同则相互消去,最后剩下的一定是这个众数。 代码如下:#include#includeint n,x,y,sum;int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){

2018-01-21 20:08:38 317

原创 BZOJ3436: 小K的农场

题解:差分约束的入门题,用spfa刷环就好了。 代码如下:#include#include#includeusing namespace std;const int maxn=100005;int n,m,tot,dis[maxn],lnk[maxn],w[2*maxn],son[2*maxn],nxt[2*maxn];bool vis[maxn],pd;inline

2018-01-21 19:41:06 185

原创 BZOJ1084: [SCOI2005]最大子矩阵

题解:这题显然是DP。定义f[i][j][k]表示前i行j列里有k个矩阵的最大元素总和。因为m代码如下:#include#include#includeusing namespace std;const int maxn=105,maxk=15;int n,m,n1,ans,a[maxn][3],f[maxn][maxn][maxk],s[maxn],sum[maxn][2

2018-01-19 23:01:01 229

原创 BZOJ1051: [HAOI2006]受欢迎的牛

题解:这题是比较典型的tarjan缩环问题,只要刷一次tarjan就可以刷出答案。 代码如下:#include#includeusing namespace std;const int maxn=100005,maxm=500005;int n,e,lnk[maxn],son[maxm],nxt[maxm],tot,dfn[maxn],low[maxn],stark[maxn

2018-01-19 22:46:48 208

原创 BZOJ1083: [SCOI2005]繁忙的都市

题解仔细一看,会发现是克鲁斯卡尔的经典题,只要刷一次就行了。 代码如下:#include#include#includeusing namespace std;const int maxn=305,maxm=10005;int n,m,ans,fa[maxn];struct dyt{ int x,y,z; bool operator const dyt &

2018-01-19 22:39:10 265

原创 BZOJ1054: [HAOI2008]移动玩具

题解:广搜+哈希,水题。 代码如下:#include#includeusing namespace std;const int maxn=65540,flg[4][2]={{-1,0},{0,1},{1,0},{0,-1}};int step[maxn],t;bool que[maxn][5][5],b[5][5],hsh[maxn];inline int read(){

2018-01-16 21:00:42 236

原创 BZOJ1192: [HNOI2006]鬼谷子的钱袋

题解水题。 你要选的数肯定是1,2,4….2^k,答案就是k+1。k就等于⌊log^2 n⌋+1。 代码如下:#includeusing namespace std;int n,ans=0;int main(){ scanf("%d",&n); for(;n;n>>=1) ans++; printf("%d\n",ans); return 0;

2018-01-15 21:01:10 153

原创 BZOJ1089: [SCOI2003]严格n元树

题解可发现规律:f[i]=f[i-1]^n+1,套高精度就好了。 代码略。。。

2018-01-15 20:57:04 215

原创 BZOJ4337: BJOI2015 树的同构

题解树哈希。因为节点可以重新标号,直接把一棵树的每一个节点当做根来做哈希再判断一下就好了。 代码如下:#include#include#include#includeusing namespace std;const int maxn=55,pow=2333,tt=1000000007;int m,n,tot,s[maxn],lnk[maxn],son[2*maxn],n

2018-01-13 21:46:25 271

原创 BZOJ1260: [CQOI2007]涂色paint

题解:水题,区间dp。 代码如下:#include#include#includeusing namespace std;const int maxn=55;int n,a[maxn],f[maxn][maxn];char s[maxn];int main(){ scanf("%s",s); n=strlen(s); for (int i=0;i1]=s

2018-01-13 21:39:00 334

原创 BZOJ1024: [SCOI2009]生日快乐

题解:n这么小,不爆搜对不起题面。。。 代码如下:#include#includeusing namespace std;int t;double n,m;double dfs(double x,double y,int z){ if (z==1) {if (xreturn x/y;} double ans=1e20; for (int i=1;i<

2018-01-13 21:35:54 220

原创 BZOJ1854: [Scoi2010]游戏

题解这题其实是二分图最大匹配。可以把1~1000000的属性和1~n的武器相连边,然后从1开始刷二分图匹配,刷到无法匹配就停下来并输出答案。 代码如下:#include#include#includeusing namespace std;const int maxn=10005,maxm=1000005;int n,m,tot,girl[maxm],lnk[maxm],s

2018-01-13 20:59:16 224

原创 BZOJ1433: [ZJOI2009]假期的宿舍

题解:匈牙利算法的经典题。。。不再赘述。 代码如下:#include#include#includeusing namespace std;const int maxn=55,maxm=2505;int T,n,m,tot,ans,a[maxn],b[maxn],girl[maxn],lnk[maxn],son[maxm],nxt[maxm];bool used[maxn

2018-01-13 20:50:36 192

原创 BZOJ1022: [SHOI2008]小约翰的游戏John

题解:这题是经典的nim游戏,判断能不能获胜,只要将每一堆的个数xor起来,再判断一下就好了。#include#includeusing namespace std;int T,n;inline int read(){ int x=0; char ch=getchar(); while (ch'0'||ch>'9') ch=getchar(); whil

2018-01-13 20:44:34 181

原创 BZOJ1055: [HAOI2008]玩具取名

题解:一道简单的dp题。定义f[i][j][c]表示i~j这一区间中的所有字母能否缩成c这一字母。转移就是:f[i][j][c]=f[i][k][c1]&& f[k+1][c2]&&(c1c2>>c,i代码如下:#include#include#includeusing namespace std;const int maxn=205;int n,a[5][maxn],hs

2018-01-13 20:41:21 166

原创 BZOJ1296: [SCOI2009]粉刷匠

题解:这题比较简单,可以用dp+0/1背包来解决。首先对每一条木板都刷一趟dp,求出f[i][m][j]表示第i个木板刷了j次可以正确粉刷的格子总数。然后对于所有的木板做一次0/1背包。最后输出f1[n][t]即可。#include#includeusing namespace std;const int maxn=55,maxm=2505;int n,m,t,a[maxn][m

2018-01-12 21:47:30 159

原创 BZOJ1002: [FJOI2007]轮状病毒

题解:找规律题:f[i]=(f[i-1]*3-f[i-2]+2),套一个高精度就好了。 代码如下:#include#includestring>using namespace std;const int maxn=105,maxl=1005;int n,f[maxn][maxl],len[maxn];void add(int x){ int a=x-1,b=x-2;

2018-01-12 21:41:12 274

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除