摘要: 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 飞向梦 阅读(151) 评论(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 飞向梦 阅读(145) 评论(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 飞向梦 阅读(158) 评论(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 飞向梦 阅读(145) 评论(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 飞向梦 阅读(101) 评论(0) 推荐(0) 编辑