上一页 1 ··· 4 5 6 7 8 9 10 11 下一页
  2012年3月15日
摘要: 考虑全面,01背包问题:代码如下:#include<string.h>#include<stdio.h>#include<stdlib.h>#define MAXN 100 + 5#define MAXN1 25000 + 100int coin[MAXN], f[MAXN][MAXN1];int n, m, sum, c;/*int cmp(const void* _p, const void* _q){ int *p = (int *)_p; int *q = (int *)_q; return *p - *q;}*/void dp(){ int i, 阅读全文
posted @ 2012-03-15 22:58 BFP 阅读(286) 评论(0) 推荐(0) 编辑
  2012年3月14日
摘要: 水题,不解释:代码如下:#include<stdio.h>#include<string.h>#define MAXN 30000 + 100long long f[MAXN];int chang[6] = {0,1,5,10,25,50};int n;void solve(){ memset(f,0,sizeof(f)); f[0] = 1; int max = 30000; for(int i = 1; i <= 5; i ++) for(int j = chang[i]; j <= max; j ++) f[j] += f[j ... 阅读全文
posted @ 2012-03-14 23:00 BFP 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 这道题要注意高精度误差,我这样做稍有一些麻烦,不如将面值放大成1, 2, 4, 10, 20, 40, 100, 200, 400, 1000, 2000再用整数计算,省去了我这个浮点误差(代码中的+0.1)的麻烦。代码如下:#include<stdio.h>#include<string.h>double n;double chang[12] = { 0,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100};long long f[6000+10];void solve(){ double amount = 300.10; memset(f,0,s 阅读全文
posted @ 2012-03-14 22:39 BFP 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 求最长公共子序列,注意到输入有空格,用gets()就可以了。代码如下:#include<stdio.h>#include<string.h>#define MAXN 100 +10char m[MAXN], f[MAXN];int r[MAXN][MAXN], n;void dp(){ int lenm = strlen(m+1); int lenf = strlen(f+1); for(int i = 1; i <= lenm; i ++) for(int j = 1; j <= lenf; j ++) { if(m[i] ... 阅读全文
posted @ 2012-03-14 14:58 BFP 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 这道题开始想麻烦了,一直在思考体重相等的情况下,分成多个子序列,再分别对其IQ进行降序排列。这是太麻烦了。换个思路,体重只是IQ降序排列的一个限制,在求其最长下降子序列时只要考虑到体重相等时IQ不能相互嵌套就可以了,只是多了一个判断语句,真是会的不难,不会的真难啊,哈哈代码如下:#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 1000 + 10int w[MAXN],IQ[MAXN], r[MAXN], f[MAXN], road[MAXN];int n, flag, max 阅读全文
posted @ 2012-03-14 00:12 BFP 阅读(592) 评论(0) 推荐(0) 编辑
  2012年3月13日
摘要: 写的麻烦了,修改了好久,用递归写的思路不是很好,以后要优化一下,用递推再做一遍。代码是下:#include<stdio.h>#include<string.h>#define INF 0x7fffffffint a[15][110], py[110][110][110],ans[110][110];int m, n;int dp(int p, int q, int x){ if(ans[p][q] != 16843009) return ans[p][q]; if(q == n) return a[p][q]; else if(p>=1&&p< 阅读全文
posted @ 2012-03-13 00:00 BFP 阅读(257) 评论(0) 推荐(0) 编辑
  2012年3月10日
摘要: 最优矩阵链乘问题:状态转移方程如下:(比较繁琐,稍后会有优化版)f[i][j] = f[i][k] + f[k][j] + a[j] - [i];//a[]存储切点i,j代表线段的头和尾利用递推运算,先把线段之间没有切点的收费情况即f[i][j]赋值为零,然后利用这个推出线段之间只有一个切点的线段,如此不断扩大,当线段的头尾一个是0一个是给出的长度,也就AC了:代码如下:(此代码不理想,浪费空间,但可AC)#include<stdio.h>#include<string.h>#define INF 0x7fffffff#define MAXN 1000 + 10int 阅读全文
posted @ 2012-03-10 22:32 BFP 阅读(568) 评论(0) 推荐(1) 编辑
摘要: 这道题不是我做出来的:但是方法很值得学习,首先通过这种方法我才知道在线oj判题的时候不是一个数据一个数据的而是一个文件一组,也就是判断程序运行时间的输入不是一个数据而是一组数据,所以本题采用了打表法。因为用正常的思路复杂度接近O(n3),时间接近三秒,而用打表法只需运行一遍算出7489种状态,再输入时只需调用即可,时间为0.03s左右:代码如下:#include<stdio.h>#include<string.h>#define MAXN 8000int n;int V[5], f[MAXN];void prepare(){ int i, j; n = 7489; me 阅读全文
posted @ 2012-03-10 10:40 BFP 阅读(249) 评论(0) 推荐(0) 编辑
  2012年3月8日
摘要: 本题是求最长公共子序列,题目也给了提示,是求最长公共子序列最基本的题。注意字符串的读取要用gets()而不用scanf()因为字符串里可能有空格。代码如下:#include<stdio.h>#include<string.h>#define MAXN 1000 + 10char a[MAXN], b[MAXN];int f[MAXN][MAXN];void dp(){ int len1 = strlen(a+1); int len2 = strlen(b+1); int max = -1; for(int i = 1; i <= len1; i ++) f... 阅读全文
posted @ 2012-03-08 14:00 BFP 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 这道多维图形嵌套问题又做了好久,但也收获了很多,代码写的不是很清晰,通过这道题熟悉了qsort()快速排序,学会了通过qsort()间接对数组地址进行排序,也了解了有关间接排序的一些方法。(日记里)。代码如下:#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXN 30+5int a[MAXN][15],f[MAXN],m[MAXN][MAXN],r[MAXN],w[MAXN];int k, n, ok;int flag;int cmp1(const void *_p,const v 阅读全文
posted @ 2012-03-08 12:47 BFP 阅读(188) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 下一页