摘要:
题意:给出一个字符串s,问至少加入多少个字母让它变成回文串解题思路:求出该字符串与该字符串翻转后的最长公共子序列的长度,再用该字符串的长度减去最长公共子序列的长度即为所求反思:因为题目所给的n的范围为3#includechar s[5005],w[5005];int dp[2][5005];int ... 阅读全文
摘要:
解题思路:给出一列数{an},求其最长递增子序列的长度max从特殊到一般来做,当给出的数列{an}是单调递增数列时,max=n;所以当{an}乱序时,maxint a[1010],b[1010],dp[1010][1010];void bubblesort(int a[],int n){ int i... 阅读全文
摘要:
解题思路:先注意到序列和串的区别,序列不需要连续,而串是需要连续的,先由样例abcfbc abfcab画一个表格分析,用dp[i][j]储存当比较到s1[i],s2[j]时最长公共子序列的长度 a b f c a b 0 0 0 0 0 0 0a 0 1 1 1 1 1 1b 0 1 2 2 2 2... 阅读全文
摘要:
解题思路:给出一个递增数列,a1,a2,a3,-----,an.问任意去掉a2到a3之间任意一个数之后,因为注意到该数列是单调递增的,所以可以先求出原数列相邻两项的差值的最大值max,得到新的一个数列(比如先去掉a2),该数列相邻两项的差值的最大值为Max1=findmax(max,a3-a1)再去... 阅读全文
摘要:
解题思路:一只老鼠共有m的猫粮,给出n个房间,每一间房间可以用f[i]的猫粮换取w[i]的豆,问老鼠最多能够获得豆的数量 sum 即每一间房间的豆的单价为v[i]=f[i]/w[i],要想买到最多的豆,一定是先买最便宜的,再买第二便宜的,再买第三便宜的-----m的值为0的时候求得的sum即为最大值... 阅读全文
摘要:
解题思路:即为给出一个总长度确定的区间,再输入不同的子区间,求在这个总区间里面包含的不相交的子区间最多有多少个。可以由最特殊的情况来想,即给出的这些子区间现在都不相交,比如----- (1,3) 1 ---------- (2,4)2 --------(5,7) 3 ----------------... 阅读全文
摘要:
解题思路:用数组将每一个显示数字可能表示的数字种数存储起来即可反思:第一次做的时候没有做出来是因为题意理解错误,第二次WA是因为情况没有考虑完全,1对应有7个数字,5对应有4个数字A. Digital Countertime limit per test1 secondmemory limit pe... 阅读全文
摘要:
解题思路:给出一个临界概率,在不超过这个概率的条件下,小偷最多能够偷到多少钱。因为对于每一个银行都只有偷与不偷两种选择,所以是01背包问题。这里有一个小的转化,即为f[v]代表包内的钱数为v的时候,小偷不被逮捕的概率,这样我们在用for(i=1;i=0;v--)f[v]=max(f[v],f[v-c... 阅读全文
摘要:
解题思路:首先是多重背包的概念,即为有一个容量为V的包,现有n个物品,每一个物品的价值为value[i],重量为weight[i],数量是num[i]则每一个物品可以取1,2,3,---,num[i]件,但对于每一个物品(无论它是否相同都只有取或者不取这两种选择),于是可以转化成01背包反思:这一道... 阅读全文
摘要:
解题思路:攒下的钱n相当于包的容量,然后是m个学校的申请费用,申请费用相当于每一个物品的消耗,得到offer的概率相当于每一个物品的价值。 因为要求的是至少得到一份0ffer的概率的最大概率,可以转化成一份offer都得不到的最小概率 即状态转移方程 f[v]=min(f[v],f[v-w[i]*(... 阅读全文