上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 71 下一页
摘要: 1287水DP 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 1402 9 int dp[N][N][4];10 char s[N][N];11 int main()12 {13 int i,j,n;14 scanf("%d",&n);15 for(i = 0 ; i >s[i];17 dp[0][0][0] = 1;18 dp[0][n-1][3] = 1;19 for(i = 0 ; i... 阅读全文
posted @ 2013-10-20 20:35 _雨 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 1346简单dp 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 200010 9 int p[N],dp[N][2];10 int main()11 {12 int i,a,b;13 scanf("%d%d",&a,&b);14 for(i = 1 ; i p[i-1])21 {22 dp[i][0] = min(dp[i-1][1]+1,dp[i-1][0]);23 ... 阅读全文
posted @ 2013-10-20 19:33 _雨 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 刷个简单的DP缓缓心情1A 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 10010 9 vectorq[N];10 #define LL __int6411 #define INF 1e1012 LL dp[N][4];13 int o[N];14 struct node15 {16 int x,y,d;17 char s[10];18 }p[N];19 int main()20 {21 int i,j,n,m;... 阅读全文
posted @ 2013-10-20 16:58 _雨 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 经典DPn个鹰蛋 m层楼 刚开始是二分想法 不过当数小于二分的那个值 貌似没发判断dp[i][j] = min(dp[i][j],max(dp[i-1][k-1],dp[i][j-k]) 选择第k层扔 若碎了 就用剩下i-1个鹰蛋来测k-1层 若没碎 就用i个鹰蛋来测上面剩下的j-k层 这样是三重循环 1000^3势必TLE 不过以二分的思想来算 1000层最多只需要10个鹰蛋就可以测出来了 所以当n大于10的时候按10来算就OK了 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7.. 阅读全文
posted @ 2013-10-20 14:40 _雨 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 这题刚开始理解错题意了 以为只能往右和下走这题挺好的 看题解看了N久啊二维的DP 第一维表示走到第几步 可以画一个正方形 以左上角斜着划线第i步走的点只能是第i条线上的点 而dp的第二维 就表示的第i步可以到达的点的状态另开一个a数组来表示 第i条线上每个字母的状态dp所代表的值就为a与b的差值 以这个来进行选择 进行记忆化确定下一步可以到达的字母的状态 是以当前可达的状态&下一步所要到达的字母的状态 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #d 阅读全文
posted @ 2013-10-20 12:55 _雨 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 短小精悍的代码dp[i][j] +=dp[k][j-1]*[i-k-1][j-1] i个结点 J层 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define LL __int64 8 LL dp[40][40]; 9 int main()10 {11 int i,j,k,n,d;12 scanf("%d%d",&n,&d);13 for(i = 0; i <= n ; i++)14 dp[0][i] = 1;15 for(i = 1; 阅读全文
posted @ 2013-10-19 20:39 _雨 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 数学so奇妙。。这题肯定会有一个循环节 就是最小公倍数对于公倍数内的相同的数的判断 就要借助最大公约数了 想想可以想明白 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 1000100 9 #define LL __int6410 LL o[N][27];11 char s1[N],s2[N];12 LL gcd(int a,int b)13 {14 return b==0?a:gcd(b,a%b);15 }16 int main(... 阅读全文
posted @ 2013-10-19 12:00 _雨 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 1037带点组合的东西吧黑书P257 其实我没看懂它写的嘛玩意儿这题还是挺不错的 一个模糊的思路可能会好想一些 就是大体的递推方程 dp1[][]表示降序 dp2[][]表示升序 数组的含义为长度为i的第一个数为j且相对第一个数为升或降的排列数 当然j肯定要小于等于i的 dp1[i][j] = dp1[i][j]+dp2[i-1][k](k》=1&&k<j)同理 dp2[i][j] = dp2[i][j]+dp1[i-1][k](k>=j&&k<i) 这里是因为dp2[i][j]中的j取不到i(因为后面还要升,就肯定取不到i);这样任务完成了一半了 一定要深刻理解两个dp数组的含义 不然后半部 阅读全文
posted @ 2013-10-18 20:00 _雨 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 1128写的dfs貌似不太对 bfs重写用bfs将图进行黑白染色 如果有超过一个与自己颜色相同的点 就把该点存入栈中 最后处理栈中的点 判断此点是否合法 不合法 取反 取反后再判断相邻点是否合法 不合法再存入栈中 直到栈为空 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define N 80010 10 vectored[N]; 11 int n; 12 int vis[N],d[N],f[N],g; 13 vo... 阅读全文
posted @ 2013-10-17 22:49 _雨 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 1641枚举 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 int w[110][110],o[110];10 int main()11 {12 int i,j,k,n,m;13 scanf("%d%d%d",&n,&k,&m);14 int t = 1;15 for(i = 1 ; i k)18 t = 1;19 o[i] = t;20 printf("%... 阅读全文
posted @ 2013-10-17 17:05 _雨 阅读(176) 评论(0) 推荐(0) 编辑
上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 71 下一页