IT民工
加油!
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 29 下一页
摘要: 这道题开始以为是求最小生成树,然后写出来之后发现和样例输出不符合,再看了一遍题,发现求所有的点之间的最大通信成本D。其中有s个卫星频道,可以和任一点连线。我们要降低成本的话就是让远的点用卫星频道,用kruskal算法合并到有 P - S棵树组成的森林,其中后S个点分别单独为一棵树,使用卫星频道。前面的点用的则为radio通信,然后合并到符合条件时取得的边为radio的最大边。#include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>#define MAXD 510in 阅读全文
posted @ 2011-12-03 22:38 找回失去的 阅读(218) 评论(0) 推荐(0) 编辑
摘要: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1219这道题先用floyd算法求出所有点之间的距离,然后枚举判断每个点到其他点的最大距离,找出其中最小的一个,如果发现其中有一个点不可到其他点,则输出Can not。#include<stdio.h>#include<stdlib.h>#define MAXD 105#define INF 1000007int d[MAXD][MAXD];int n, m, u, v, w, max, mini;bool flag;int min( int a, int b){ retu 阅读全文
posted @ 2011-12-03 20:45 找回失去的 阅读(249) 评论(0) 推荐(0) 编辑
摘要: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1212这道题要找到中位数,我的方法是将两个序列的数字比较,然后将小的那个放入s中,当s的计数器过了N后,就可以跳出比较的循环,输出s[N]。#include<stdio.h>#include<stdlib.h>#define MAXD 100005int s[MAXD], N, a[2 * MAXD];int main(){ while( scanf( "%d", &N) == 1) { for( int i = 1; i <= 2 * 阅读全文
posted @ 2011-12-03 20:38 找回失去的 阅读(312) 评论(1) 推荐(0) 编辑
摘要: 递推,状态转移方程:dp[j] = dp[j - a[i]]; 依题意a[i] = i^3.#include<stdio.h>#include<string.h>#define MAXD 10005long long dp[MAXD], a[25];int N;int main(){ for( int i = 1; i <= 21; i ++) a[i] = i * i * i; memset( dp, 0, sizeof dp); dp[0] = 1; for( int i = 1; i <= 21; i ++) for( int j = ... 阅读全文
posted @ 2011-12-03 00:15 找回失去的 阅读(201) 评论(0) 推荐(1) 编辑
摘要: 这道题还是0-1背包问题,看一个队能拿到的最大价值是多少并输出。开始理解错题意,将每个人能拿的最大重量加在一块,然后一起拿一次。其实应该是每个人都拿一次...#include<stdio.h>#include<string.h>#define MAXD 1005int f[MAXD * 31];int p[MAXD], w[MAXD];int c, ans, T, N, G;int max( int a, int b){ return a > b ? a : b;}int main(){ scanf( "%d", &T); while( 阅读全文
posted @ 2011-12-02 22:43 找回失去的 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 这道题给定一个时间上限,然后一个数字N,后面跟着N首歌的时间长度,要我们求在规定时间w内每首歌都要完整的播放,最多能播放多少时间。一个比较典型的背包问题,但是要标记出我们选出的歌曲的编号,然后按顺序输出他们的长度,最后输出求的的最长播放时间。#include<stdio.h>#include<string.h>#define W 10005int f[W], a[25];bool vis[25][W];int w, N;int main(){ int j; while( scanf( "%d", &w) == 1) { scanf( &quo 阅读全文
posted @ 2011-12-02 14:42 找回失去的 阅读(487) 评论(0) 推荐(1) 编辑
摘要: 这道题有三点需要注意:1. 输入的钱数是5c的倍数。2. 浮点数的处理。3. 输出的格式。关于这两点,把5c看成一个单位,将所有的面额转换成5c的倍数存入数组。浮点数的处理我一直没把握好,用了强制类型转换,发现一直WA,然后参考了staginner的处理方法,用了floor函数,然后AC了。#include<stdio.h>#include<string.h>#include<math.h>#define MAXD 6005const int coin[] = { 1, 2, 4, 10, 20, 40, 100, 200, 400, 1000, 2000} 阅读全文
posted @ 2011-12-01 11:30 找回失去的 阅读(167) 评论(0) 推荐(1) 编辑
摘要: 这道题和之前的 Coin Change 有点类似,dp[j] = dp[ j - coin[i]];但是得注意数据的范围。#include<stdio.h>#include<string.h>#define MAXD 30005long long dp[MAXD];const int coin[] = { 1, 5, 10, 25, 50};int main(){ int c; memset( dp, 0, sizeof dp ); dp[0] = 1; for( int i = 0; i < 5; i ++) for( int j = 0; j < 30. 阅读全文
posted @ 2011-12-01 10:51 找回失去的 阅读(155) 评论(0) 推荐(1) 编辑
摘要: #include<stdio.h>#include<string.h>#define MAXD 105int a[MAXD], b[MAXD];int d[MAXD][MAXD];int N1, N2;int max( int a, int b){ return a > b ? a : b;}void init(){ for( int i = 1; i <= N1; i ++) scanf( "%d", &a[i]); for( int i = 1; i <= N2; i ++) scanf( "%d", 阅读全文
posted @ 2011-11-30 18:43 找回失去的 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 这道题的输入比较奇葩,先输入N,再输入事件号,事件对应的时间是输入序列中的编号。然后再求序列c与序列r的最长公共子序列。#include<stdio.h>#include<string.h>#define MAXD 25int d[MAXD][MAXD], c[MAXD], r[MAXD];int N;int max( int a, int b){ return a > b ? a : b;}void dp(){ memset( d, 0, sizeof d); for( int i = 1; i <= N; i ++) for( int j = 1; j 阅读全文
posted @ 2011-11-30 17:50 找回失去的 阅读(235) 评论(0) 推荐(0) 编辑
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 29 下一页