- 博客(16)
- 收藏
- 关注
原创 2479&&2593
先从左到右遍历,把以a[i]为结尾的最大子序列存储在dp[i]中再从右向左遍历,测试以a[i]为开头的最大子序列与dp[i-1]之和,保存最大值输出
2015-05-05 12:35:16 268
转载 背包之01背包、完全背包、多重背包详解
背包之01背包、完全背包、多重背包详解 PS:大家觉得写得还过得去,就帮我把博客顶一下,谢谢。首先说下动态规划,动态规划这东西就和递归一样,只能找局部关系,若想全部列出来,是很难的,比如汉诺塔。你可以说先把除最后一层的其他所有层都移动到2,再把最后一层移动到3,最后再把其余的从2移动到3,这是一个直观的关系,但是想列举出来是很难的,也许当层数n=3时还可以模拟下,再大一些就
2015-05-01 19:57:28 347
原创 1384
完全背包,和01背包区别就是中间的循环颠倒过来了(要保证是基于这次选择上)片段 int w, p; scanf("%d",&T); while(T--) { scanf("%d%d",&empty,&full); sum=full-empty; for(int i=0;i<=sum;i++)
2015-04-30 22:11:49 320
原创 3624
dp,最基础的01背包Memory 184KTime 157MS#include #include int dp[12900];int main (void){ int n, m, i, j, w, v; while(scanf("%d %d",&n, &m)==2){ memset(dp,0,sizeof(dp)); for(i = 1; i<=n;
2015-04-28 09:20:44 463
原创 1088
dp 记忆化用了两个数组,一个记录所有点的数据,一个是dp[i][j]记录每个点的最大距离,当最小时(无法降低时)为1如25-24-23-……-2-1长度是25(点的数量)dp的伪代码f( i, j ){if dp[i][j]>0 return dp[i][j]for 点i,j的四个方向{ if 坐标没溢出{ if 可以向那个
2015-04-25 19:07:21 257
原创 1050
一开始思路错了,活活折腾了几小时。。。以后一小时想不出来直接不想了!其实就是最大子序列,每行与之后几行压缩成一行再求就ok了~之前一直想先求再压缩,整个人都斯巴达了也没想出来。。。最可恨的是过了一天再看才发现一开始思路就不对,简直智商捉急
2015-04-25 10:54:57 224
原创 1018
普通的dp题,虽然内存用得有点大,但还是AC了。。。d[i][j]代表i个设备且他们当中最小带宽是j时的最小总费用,最后结果拿所有有值的d[n][j]算min{所有j/d[n][j]}核心:每读入一对d和p,测试所有一行前一个状态d[i-1][k]是否有值,有则更新这一状态(测试是否加上这个设备)tmp=min(d,k)d[i][tmp]=min{ d[i][tmp] , d[
2015-04-23 17:20:31 254
原创 1015(WA)
150421用dp,d[i][j]代表选了j个人且差为i的值(所有选中的di+dp的总和),关键为d[i+sub[k]][j+1] = max{ d[i][j]+plus[k], d[i+sub[k]][j+1]}我觉得应该没错呀,纠结了好久,另外网上找了份能AC的代码……核心差不多,但他加了一些东西,好吧,之后再研究
2015-04-21 21:08:37 238
原创 人民币金额大写
Q:在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹用户输入:30201,程序输出:叁万零贰佰零壹用户输入:30001,程序输出:叁万零壹用户输入:31000,程序输出:叁万壹仟用户
2015-04-21 16:23:45 507
原创 取字符
Q:从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。不同的取法输出顺序可以不考虑。例如:输入:abc则输出:abc输入:abcd则输出:abcabdacdbcd输入:abcaa则输出:
2015-04-21 16:17:17 755
原创 串的处理
Q:串的处理在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:1. 把每个单词的首字母变为大写。2. 把数字与字母之间用下划线字符(_)分开,使得更清晰3. 把单词中间有多个空格的调整为1个空格。例如:用户输入:you and me what cpp2005program则程序输出:
2015-04-21 15:58:07 236
原创 立方和等式
Q:考虑方程式:a^3 + b^3 = c^3 + d^3其中:“^”表示乘方。a、b、c、d是互不相同的小于30的正整数。这个方程有很多解。比如:a = 1,b=12,c=9,d=10 就是一个解。因为:1的立方加12的立方等于1729,而9的立方加10的立方也等于1729。当然,a=12,b=1,c=9,d=10 显然也是解。如果不计abcd交换次序的情况,这算
2015-04-21 15:46:11 499
原创 趣味算式
Q: 匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练! 某批警察叔叔正在进行智力训练: 1 2 3 4 5 6 7 8 9 = 110; 请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,
2015-04-21 13:02:55 436
原创 砝码称重
Q:5个砝码用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。本题目要求编程实现:对用户给定的重量,给出砝码组合方案。例如:用户输入:5程序输出:9-3-1用户输入:19程序输出:27-9+1
2015-04-21 12:58:35 343
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人