摘要: 题目链接注意两点,倒着搜,效率高,注意0和1时候的特判。。。忘了UVA的longlong,CE一次。 1 #include <stdio.h> 2 #include <string.h> 3 int p[100],z; 4 long long n; 5 void dfs(long long n,int step) 6 { 7 int i; 8 if(z) return ; 9 if(n == 1)10 {11 z = 1;12 for(i = step-1; i >= 1; i --)13 printf("... 阅读全文
posted @ 2012-07-22 20:48 Naix_x 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 题目链接找出最高一个线段覆盖吧,很明显的O(n^2)的DP,注意排序的时候按长度排序。WA了一次,没有注意到题目中their endpoints do not coincide,他们的端点不能重合,我还以为输出要顺序有错误。。。得亏又看了遍题目。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 struct segment 5 { 6 int x,y,len; 7 int num; 8 }p[501]; 9 int o[501],k[501],q[501];10 int 阅读全文
posted @ 2012-07-22 15:56 Naix_x 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题目链接二维DP,开两个标记数组记录前i个数1的个数,和0的个数。1Y。状态转移方程:p[i][j] = min(p[i-k][j-1]+(sum1(i)-sum1(i-k))*(sum0(i)-sum0(i-k))(开始的时候i-k想成k了。。自己试了几个数据没过,手算查错) 1 #include <stdio.h> 2 #include <string.h> 3 #define N 10000000 4 int p[501][501],sum1[501],sum0[501]; 5 int main() 6 { 7 int n,m,i,j,k; 8 scanf(&qu 阅读全文
posted @ 2012-07-22 11:16 Naix_x 阅读(311) 评论(4) 推荐(0) 编辑