摘要:
【算法】动态规划 【难度】★☆☆☆☆很经典的完全背包问题。详见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 阅读全文
摘要:
【算法】模拟 【难度】★☆☆☆☆直接模拟。注意如果牛和人开始绕圈子会陷入死循环,所以在时间足够大的时候退出,具体的临界值我选了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 阅读全文
摘要:
【算法】动态规划 【难度】★★☆☆☆这道题花费了很长时间(话说好像没有那道题时间短的)其实很显然是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 阅读全文
摘要:
【算法】模拟 【难度】★☆☆☆☆这道题不难,关键是长除法。手动模拟一下长除法就会发现,小数部分循环的标志是余数的重复出现。所以记录余数就可以了。注意一下整除的特殊情况就可以了,我因为这个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 阅读全文
摘要:
【算法】动态规划 【难度】★★★☆☆ 一看就是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, 阅读全文