摘要: 【算法】动态规划 【难度】★☆☆☆☆很经典的完全背包问题。详见dd的背包九讲View Code 1 /* 2 ID: wsc5001 3 LANG: C 4 TASK: inflate 5 */ 6 #include <stdio.h> 7 #include <stdlib.h> 8 int c,v; 9 int s[10000+10];10 int t[10000+10];11 int f[10000+10];12 int bigger(int a,int b)13 {14 return a>b?a:b;15 }16 int main()17 {18 freop 阅读全文
posted @ 2012-03-25 19:43 wsc500 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 【算法】模拟 【难度】★☆☆☆☆直接模拟。注意如果牛和人开始绕圈子会陷入死循环,所以在时间足够大的时候退出,具体的临界值我选了10000000,nocow上有证明说最多160000步。【收获】极限情况判断View Code 1 /* 2 ID: wsc5001 3 LANG: C 4 TASK: ttwo 5 */ 6 #include <stdio.h> 7 #include <stdlib.h> 8 struct wz{int x,y,fs;}; 9 int ct=0; 10 int map[12][12];// 0=可通过√ 1=墙x 11 struct wz m 阅读全文
posted @ 2012-03-25 19:40 wsc500 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 【算法】动态规划 【难度】★★☆☆☆这道题花费了很长时间(话说好像没有那道题时间短的)其实很显然是DP,状态转移方程也很容易想到(我是参考了最长公共子序列的思想)。设f[i]表示第i个是否在前缀中,则:{dp[i]=max{dp[j]+j-i}|i到j-1的字串是primitive。 i<j<=n}如果没有i-j<=10最坏情况下就会超时!我在这纠结了半天,参照别人的题解才想到的。还有一点是关于元素的判断。最初是用strcmp但是也会超时。想到了hash,搜了一下有题解说可以把每个元素变成10位2进制数,但是我没找到到底怎么做(= =)。。。所以还是说一下我的方法,也是has 阅读全文
posted @ 2012-03-25 19:38 wsc500 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 【算法】模拟 【难度】★☆☆☆☆这道题不难,关键是长除法。手动模拟一下长除法就会发现,小数部分循环的标志是余数的重复出现。所以记录余数就可以了。注意一下整除的特殊情况就可以了,我因为这个WA了一次。【收获】要注意特判View Code 1 /* 2 ID: wsc5001 3 LANG: C 4 TASK: fracdec 5 */ 6 #include <stdio.h> 7 #include <stdlib.h> 8 int n,d; 9 int checko[100010];10 int ans[100000];11 int main()12 {13 freope 阅读全文
posted @ 2012-03-25 19:34 wsc500 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 【算法】动态规划 【难度】★★★☆☆ 一看就是DP,但是很可惜我完全没有思路= =看了题解,nocow上讲的很透彻,两种方法都很好。首先明确一下题目的意思:用N个点组成一棵深度为K的二叉树,求一共有几种方法? 设dp[i,j]表示用i个点组成深度最多为j的二叉树的方法数,则:dp[i,j]=∑(dp[k,j-1]×dp[i-1-k,j-1])(k∈{1..i-2}) 初始化:dp[1,i]=1我们要求的是深度恰好为K的方法数S,易知S=dp[n,k]-dp[n,k-1]。 但需要注意的是,如果每次都取模,最后可能会有dp[n,k]<dp[n,k-1],所以可以用S=(dp[n, 阅读全文
posted @ 2012-03-25 19:16 wsc500 阅读(286) 评论(0) 推荐(1) 编辑
摘要: 【算法】模拟 【难度】★☆☆☆☆这是一道区间合并问题。我的算法如下;对于输入数据:3300 1000700 12001500 2100可得三个区间[300,1000][700,1200][1500,2100]读入时开一个二维数组tt,按顺序读入300,1000,700,1200,1500,2100;其中区间开头的数值做标记1,区间终点做标记-1;这样tt就变成了:[i][0]3001000700120015002100[i][1]1-11-11-1然后顺序遍历这个数组;开一个计数器变量ct=0;每当当前的数标记为1时ct++,标记为-1时ct--;每当ct恰好==0时就完成了一个大区间合并;. 阅读全文
posted @ 2012-01-10 21:59 wsc500 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 【算法】模拟 【难度】★☆☆☆☆仍然是模拟,但要注意这个项链是环状的。有一种比较先进的办法是把这个项链载入两次,这样就可以从头到尾遍历了。注意白色的珠子不能作为起点。我的程序没有用上面的方法,直接遍历到最后在返回开头。View Code 1 /* 2 ID: wsc5001 3 LANG: C 4 TASK: beads 5 */ 6 #include<stdio.h> 7 #include <stdlib.h> 8 char ch[351]; 9 int n;10 int zhaoqian(int st)11 {12 char goon;13 int i=0,time 阅读全文
posted @ 2012-01-10 21:47 wsc500 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 【算法】模拟 【难度】☆☆☆☆☆很简单的模拟题,关键是读清楚题,注意如何判断闰年。View Code 1 /* 2 ID: wsc5001 3 LANG: C 4 TASK: friday 5 */ 6 #include<stdio.h> 7 int runnian(int y) 8 { 9 if (y%100==0)10 {11 if (y%400==0)12 return 1;13 else14 return 0;15 }16 if (y%4==0)17 re... 阅读全文
posted @ 2012-01-10 21:39 wsc500 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 【算法】模拟 【难度】☆☆☆☆☆考察字符串处理。这道题可以边读入边处理。注意审题,题目中没有说送礼者和受礼者的姓名和前面的名单中的名字顺序一样。关键在于字符串的匹配。字符串的匹配可以用一个strcmp函数的。。我忘了这个函数就自己写了一个。。View Code 1 /* 2 ID: wsc5001 3 LANG: C 4 TASK: gift1 5 */ 6 #include<stdio.h> 7 #include<stdlib.h> 8 char pname[10][15]={'\0'}; 9 int n;10 int zhaoren(char shu 阅读全文
posted @ 2011-12-24 21:35 wsc500 阅读(239) 评论(0) 推荐(0) 编辑