上一页 1 2 3 4 5 6 7 ··· 9 下一页
摘要: 之前我有写过关于自学的些许好处(详见http://www.cnblogs.com/quantumplan/archive/2013/05/10/3070372.html) 这次说一个自学的弊端,暂且拿一个不恰当的词来形容一下——闭门造车。 就我个人感觉来说,自学对于接受已有的简单的知识很有效率,而且掌握程度啊啥的效果很好,一旦进入一个比较难的区域时会感到吃力,这时候就会有两种选择,一是自己想办法解决,二是去找别人已经解决并公布的办法。 中国的学生绝大多数会选择第二种,当然理由也很多:既然有“捷径”,为何非不走,还要绕一大圈,最后结果还不是一样的。而且还可以省更多的时间更多的经历去“学... 阅读全文
posted @ 2013-05-13 09:49 飞向梦 阅读(249) 评论(2) 推荐(0) 编辑
摘要: DP可以这里给出非DP程序 题目传送门 1 #include<stdio.h> 2 int main() 3 { 4 int t,n,i,max,m,sum,ki,kj,k,a,b; 5 scanf("%d",&t); 6 for(k=1;k<=t;k++) 7 { 8 scanf("%d",&n); 9 max = -1000; //两个初始化成-100010 sum = -1000; //注意sum的初始化,后来见到刘汝佳书上,sum= a[0],也就是第一个数11 ... 阅读全文
posted @ 2013-05-11 21:26 飞向梦 阅读(149) 评论(0) 推荐(1) 编辑
摘要: 经典DP题目:状态转移方程:if(a[j] == b[i]) table[i][j] = table[i-1][j-1] + 1; else table[i][j] = max(table[i-1][j],table[i][j-1]);把a串看成横行,b串看成数列,依次相同加1,看斜角 题目传送门 1 #include<stdio.h> 2 #include<string.h> 3 char a[1003],b[1003]; 4 int table[1003][1003]; 5 int max(int a, int b) 6 { 7 return a>b?a:b; 阅读全文
posted @ 2013-05-11 21:04 飞向梦 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 这是一道Special Judge的题目,查了一下定义:一个题目可以接受多种正确答案,即有多组解的时候,题目就必须被Special Judge.Special Judge程序使用输入数据和一些其他信息来判答你程序的输出,并将判答结果返回.题目刚开始觉得挺简单的,后来做着做着就有可多问题,还是做题少啊。。。思路比较简单,按重量W排序,之后去求速度V的下降子序列自己写的比较有条理、看代码注释吧 题目传送门 1 #include<stdio.h> 2 #include<string.h> 3 typedef struct { 4 int w,s,old; //old存储排序前 阅读全文
posted @ 2013-05-11 20:32 飞向梦 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 状态转移方程:F(n)=min(F(i)*2,F(j)*3,F(k)*5,F(m)*7) (n>i,j,k,m)特别的:i,j,k,m 只有在本项被选中后才移动题目还要注意的一点是输出问题。。。 题目传送门 1 #include<stdio.h> 2 int hum[6000]; 3 4 int min(int a, int b, int c, int d) 5 { 6 int m; 7 if(a>b) m = b; 8 else m = a; 9 if(m>c) m =c;10 if(m>d) m =d;11 return m;12 }13... 阅读全文
posted @ 2013-05-11 20:20 飞向梦 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 先对a[]按小到大排序.设:dp[i][j]表示前 i 个物品中搬 j 对的最少疲劳度.1、当i==2*j时,dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])^2因为,当 (a1-a2)^2+(a3-a4)^2 <= (a1-a4)^2+(a3-a2)^2 ( a1<=a2<=a3<=a4 ).2、当i>2*j时,dp[i][j]=min( dp[i-1][j] , dp[i-2][j-1]+(a[i]-a[i-1])^2 ) 题目传送门 1 #include<cstdio> 2 #include<cstring> 3 阅读全文
posted @ 2013-05-11 20:15 飞向梦 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 这道题跟最长上升子序列查不多,只不过需要记录的信息不一样关于最长上升子序列见:最长上升子序列nlogn算法 题目传送门 1 #include<stdio.h> 2 #include<string.h> 3 int a[1001]; 4 int b[1001]; 5 int main() 6 { 7 int n,i,j; 8 int max; 9 while(scanf("%d",&n),n)10 {11 memset(b,0,sizeof(b));12 memset(a,0,sizeof(a));13 for(i... 阅读全文
posted @ 2013-05-10 16:42 飞向梦 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 这题目是经典的DP题目,也可叫作LIS(Longest Increasing Subsequence)最长上升子序列 或者 最长不下降子序列。很基础的题目,有两种算法,复杂度分别为O(n*logn)和O(n^2) 。A.O(n^2)算法分析如下: (a[1]...a[n] 存的都是输入的数) 1、对于a[n]来说,由于它是最后一个数,所以当从a[n]开始查找时,只存在长度为1的不下降子序列;2、若从a[n-1]开始查找,则存在下面的两种可能性: (1)若a[n-1] < a[n] 则存在长度为2的不下降子序列 a[n-1],a[n]; (2)若a[n-1] > a[n] 则存在长度 阅读全文
posted @ 2013-05-10 16:32 飞向梦 阅读(486) 评论(0) 推荐(0) 编辑
摘要: 这个题目比较简单,主要是考虑输出空格回车思路:找公差——2*m,每次加上2*m 1 #include<stdio.h> 2 int main() 3 { 4 int m,n,i,k; 5 while(scanf("%d%d",&n,&m)==2) 6 { 7 k = n/m; 8 for(i=0;i<n/m;i++) 9 {10 if(i==0)printf("%d",m+1);11 else12 printf(" %d",m+1+m*2*i)... 阅读全文
posted @ 2013-05-10 16:05 飞向梦 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 这个题目第一眼看了真没思路,也没想到跟动态规划有关系,最后还是看了Tanky Woo的文章才明白看图片对比一下,数轴以5为塔顶,左右两边依次往下落,就形成数塔 题目传送门 1 #include<stdio.h> 2 #include<string.h> 3 int dp[11][100001]; 4 int max(int a, int b) 5 { 6 return a>b?a:b; 7 } 8 9 int main()10 {11 int n,x,t,maxtime;12 int i,j;13 while(scanf("%d",&n 阅读全文
posted @ 2013-05-10 15:07 飞向梦 阅读(107) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 9 下一页