自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

flyawayl的博客

只为成功找方法,不为失败找借口。

  • 博客(28)
  • 资源 (4)
  • 收藏
  • 关注

原创 hdu 2018递推

第n月的牛的数量由第n-1个月的老牛加上n-1个月新生的小牛,得到公式F(n)=F(n-1)+F(n-3)AC代码:#includeconst int maxn=55;int ans[maxn];void solve(){ ans[1]=1; ans[2]=2; ans[3]=3; ans[4]=4; for(int i=5;i<55;++i)

2016-10-29 21:04:05 262

原创 hdu 2045 递推

从n>=4开始考虑,只考虑n-1和1的颜色是否相等情况。推出公式F(n)=F(n-1)+2*F(n-2)AC代码:#includeconst int maxn=55;long long ans[maxn];void solve(){ ans[1]=3; ans[2]=6; ans[3]=6; for(int i=4;i<=50;++i)

2016-10-29 20:46:32 262

原创 hdu 2044 递推

到达第n个格子的方案数等于第n-1个格子的方案数加上第n-2个格子的方案数。d[i]=d[i-1]+d[i-2];AC代码:#includeconst int maxn=55;long long d[maxn];int main(){ int T,a,b; scanf("%d",&T); while(T--){ scanf("%d%d",&

2016-10-29 13:27:06 191

原创 uva 1583

枚举1~100000把所有数的最小generators记录下来,直接查表即可。AC代码:#include#include#includeusing namespace std;const int maxn=100000+50;int ans[maxn];int get(int a){ int b=a; while(b>0){ a+=b%10;

2016-10-28 20:37:21 98

原创 codeforces 429B

把四个角到每个格子的最大花费预处理,然后枚举每个格子,注意边缘不需要枚举,因为如果相遇点在边缘必定不会满足只有一个点相遇的前提。AC代码:#include#include#includeusing namespace std;const int maxn=1004;int dp[maxn][maxn][4]; //从四个角出发int a[maxn][maxn];int mai

2016-10-28 19:42:57 244

原创 hdu 2048 递推&&错排

直接贴出递推公式:cnt[n]=(i-1)*(cnt[n-1]+cnt[n-2]);数组保存的是失败的种数AC代码:#includeconst int maxn=21;long long p[maxn],cnt[maxn];double ans[maxn];void solve(){ long long w=1; for(int i=1;i<=20;++i)

2016-10-27 22:37:19 311

原创 hdu 2064 汉诺塔III

考虑把n-1个移动到c盘,然后把n移动到b,再把n-1个移动到a,把n移动到c,再把n-1个移动到c。递推公式 F[n]=3*F[n-1]+2;AC代码:#includeconst int maxn=36;long long ans[maxn];void solve(){ ans[0]=0; ans[1]=2; for(int i=2;i<=35;++i)

2016-10-27 22:33:37 221

原创 hdu 1207 四柱汉诺塔

递推,汉诺塔I的变形。     这题真心没想到正确解法,越想越迷糊。这题看了别人题解过得,以后还是自己多想想,脚步太快并非好事。     贴上分析:      分析:设F[n]为所求的最小步数,显然,当n=1时,F[n]=1;当n=2时,F[n]=3;如同经典汉诺塔一样,我们将移完盘子的任务分为三步:(1)将x(1(2)将a柱上剩下的n-x个盘依靠b柱移到d柱(注:此时

2016-10-26 22:36:03 555

原创 hdu 5903 Square Distance

需要DP预处理。   因为字符串可以被分成两段相同的,d(i,j)表示从i~n/2-1,花费j是否可行  转移方程://边界处理 memset(dp,0,sizeof(dp)); dp[n/2][0]=1; for(int i=n/2-1;i>=0;--i){ if(s[i]==s[i+n/2]){

2016-10-26 11:42:50 112

原创 uva11400 动态规划

没种电压灯泡要么全换,要么不换。状态d(i)表示前i种灯泡的最低价格。    转移方程:dp[i]=min(dp[i],dp[j]+(s[i]-s[j])*d[i].c+d[i].k);AC代码:#include#includeusing namespace std;const int maxn=1000+5;const int INF=1<<30;struct node{

2016-10-24 22:27:16 288

原创 hdu 2553 N皇后

这题要打表,不然超时。AC代码#include#includeint n,cnt;int vis[3][20];int ans[11];void dfs(int i){ //以行递增 if(i==n){ ++cnt; return; } for(int j=0;j<n;++j){ //尝试放入第列 if(!v

2016-10-22 13:38:53 285

原创 蚂蚁爬杆问题 UVA 10881

算法入门经典训练指南上的题。     这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经过t秒,最后蚂蚁的最终位置是固定的,但是对应位置的蚂蚁有可能不再是原来的蚂蚁;现在考虑经过t秒后蚂蚁的位置,假设蚂蚁刚开始以离杆的左端距离升序排序,那么t秒后,他们的位置排序不会改变,举例

2016-10-22 13:05:22 339

原创 uva 116 单向TSP

这题的状态很明显。    转移方程就是d(i,j)=min(d(i+1,j+1),d(i,j+1),d(i-1,j+1)) //注意边界我用了一个next数组方便打印结果,但是一直编译错误,原来是不能用next命名数组,会和std::next冲突.AC代码#include#includeusing namespace std;const int maxn=100+5;con

2016-10-20 21:58:16 391

原创 UESTC 251 最长上升子序列O(nlgn)

O(n^2)过不了。必须要用一个额外的数组保存当前长度最小值,然后lgn查表AC代码#include#includeusing namespace std;const int maxn=100000+5;const int INF=1<<30;int dp[maxn],a[maxn],ans[maxn];int main(){ int T,n; scanf("%

2016-10-20 20:23:47 328

原创 uva1347 经典dp

详细的思路书上面有,有一点要强调的是题意容易理解错:必须严格向右或则向左移动,不能到了第3个点又回到第2个点。否则这个状态方程是不成立的,变成了NP难问题    状态方程: dp[i][j]=min(dp[i+1][j]+dis(pos[i],pos[i+1]),dp[i+1][i]+dis(pos[j],pos[i+1]))由于当前状态取决于i+1状态所以必须逆序。

2016-10-20 14:45:06 270

原创 hdu 1010 回溯加奇偶性剪枝

普通的剪枝会超时,必须加入奇偶性剪枝。    直接上图:        AC代码:#include#include#includeusing namespace std;const int maxn=10;char mp[maxn][maxn];int d[maxn][maxn];int n,m,T;const int dx[]={0,0,1,-1};const

2016-10-19 21:02:40 249

原创 最长回文子串 动态规划

边界条件:一个字符的回文长度为1    状态:d(i,j)表示在d(i...j)的最长回文串的长度    转移方程:if(s[i]==s[j]) dp[i][j]=dp[i+1][j-1]+2;else dp[i][j]=max(dp[i+1][j],dp[i][j-1]);由于状态方程中,需要i+1的状态则外层循环为逆序,由于需要j-1的状态,内层为顺序代码:#includ

2016-10-17 21:51:48 795 1

原创 uva437 DAG

直接套用DAG的思路就行。AC代码:#include#include#includeusing namespace std;const int INF=1<<30;const int maxn=50;int dp[maxn][3];int G[maxn][3][maxn][3];struct node{ int a[3],b[3],c[3]; node(){

2016-10-16 20:17:07 291

原创 ACdream 1068

我没有用二分法,直接构造最小数,既然题目保证答案一定存在那么与上界无关。    如给定S=16,它能构成的最小数为79,尽量用9补位,最高位为S%9.如果构造的数大于下界A,那么直接输出,因为这是S能构成的最小数;小于下界就要分两种情况了,第一种情况就是A的各位的和P小于S,那么从最低位一直向高位不,最高补9,补不到9,就补能补的最大数;第二种情况就是P大于S,那么就从最高位枚举,看能否补成和

2016-10-16 14:40:52 229

原创 最长公共子序列 动态规划

描述:给定两个序列X和Y,求X和Y最长的公共序列,并打印该序列。代码:#include#include#includeusing namespace std;const int maxn=1000+5;char a[maxn],b[maxn];int ans[maxn][maxn];void print(int n,int m){ if(!ans[n][m]) ret

2016-10-16 14:24:01 228

原创 hdu 2078

考查思维是否全面的的一道题。      设第i个课程难度为d[i],首先求出n门课程中难度最大maxt和最小的课程mint,当m=1时应该用max(abs(maxt-100),abs(100-mint))的平方;当m>1时,求出最大值和最小值后,应当再次与100比较,因为有可能最小值大于100,或则最大值小于100.AC代码:#include#includeusing namesp

2016-10-12 20:23:27 272

原创 uva1025 动态规划

这道题的边界是dp(T,N)=0,状态dp(i,j)表示在时间i、第j个车站最少等待时间,有三个决策:1、等1分钟 2、如果有向左的车,向左 3、若果有向右的车,向右  转移方程就是dp(i,j)=min(dp(i+1,j),dp(i+t[j],j+1),dp(i+t[j-1],j-1))AC代码:#include#include#includeusing namespace std

2016-10-09 20:51:17 302

原创 矩阵链乘 动态规划

矩阵链乘

2016-10-08 21:08:06 266

原创 钢条切割 路径打印

dp

2016-10-06 21:13:23 211

原创 uva103 动态规划

dp

2016-10-05 16:00:47 97

原创 C. Polycarp at the Radio

cf

2016-10-04 13:51:32 339

原创 uva211 回溯

回溯

2016-10-03 15:21:36 303

原创 uva225 回溯剪枝

回溯+剪枝

2016-10-02 21:12:09 400

华科834内部复习八套卷

华中科技大学93专业课,内部复习八套卷,包含详细答案。

2018-09-17

华科834复习全书(数据结构+计算机网络)

华科834专业课,数据结构+计算机网络复习全书,配合王道书籍使用效果更好。

2018-09-17

kuangbin算法模板

上海大学kuangbin神牛的算法模板,十分好用!

2017-02-28

(ACM 黑书)实用算法的分析与程序设计.pdf

学习算法很有必要的一本书,进阶必备!!

2016-08-17

空空如也

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

TA关注的人

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