• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






tim11

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

2012年8月17日

hdu 2546 饭卡 (01背包+贪心)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2546(1) 简单的01背包问题,但是只要有5元钱就可以买菜,不论菜多贵(但是才只能一样一样地买)。所以预留5元钱买最贵的菜。(2)排序时用到了:sort(a, a+n); 但是对于我的解法而言,应当是:sort(a+1, a+n+1);(3)有再循环里头用过一个 if-else 结构,并没有用贪心策略,AC了。可是代码丢了,也忘了时怎么写的。。(4)钱不够5元的直接输出结果。View Code #include<stdio.h>#include<string.h>#include&l 阅读全文
posted @ 2012-08-17 18:52 tim11 阅读(173) 评论(0) 推荐(0)
 
hdu 3449 Consumer(分组背包变形)**
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3449(1)本题属于分组背包的类型,但对于每一组,需先买盒子才能买物品,盒子无价值,武平才有价值(其实盒子有价值也能做)。 如何保证买入物品时已经买入了盒子,且不会出现多次买同一个盒子的悲剧呢?有一种办法是,开一个新的数组d[100100],对于每个d[i], 先买下盒子 i, 再用剩余的钱继承原有的规划结果:for(j=p;j<=w;j++) d[j]=dp[j-p]; 然后一一装入该组各个物品,得到最优的 d[i] ,最后用来更新 dp[i] 。(2)用来买盒子的钱不可用:if(d[k-c]!=-1 阅读全文
posted @ 2012-08-17 15:47 tim11 阅读(273) 评论(0) 推荐(0)
 
poj 1787 Charlie's Change (多重背包+记录路径)***
摘要: http://poj.org/gotoproblem?pid=1787(1)本题为一般的多重背包问题,亮点在于记录路径的方法,开了一个数组 pre[10010] 记录前一步的位置。调用时用 sum[30] 逐个累加即可(当然,这里的调用方法还有其他的各种方法)。 记录:pre[j]=j-b[i]; 调用:for(i=m;pre[i]!=-1;i=pre[i]) ans[i-pre[i]]++;(2)多重背包一如既往,用数组 used[10010] 限制,转化为01背包(或是完全背包,只是形式有点像而已,不属于而这任何一类)。(3)初始化问题: 1)将dp[i] 预处理为0。 dp... 阅读全文
posted @ 2012-08-17 15:16 tim11 阅读(212) 评论(0) 推荐(0)
 
poj 1742 Coins (多重背包)
摘要: http://poj.org/gotoproblem?pid=1742(1)多重背包的处理方式有两种: 1)转化为分组背包。本题用到了将硬币数转化成“1,2,4,8,... ,余数”的形式。2)转化为01背包。再开一个数组,记录每一个dp[i] 对每一种硬币的使用情况,以确保不多用硬币。(2)以运行效率而言,上一条中2)的效率高一些(我的代码前者超时,后者AC,具体原因不是特别明确)。似乎本题就是在卡时间,在时间细节设陷阱,各位请注意。 以下代码用的是转化为01背包。具体代码:View Code #include<stdio.h>#include<string.h>#i 阅读全文
posted @ 2012-08-17 10:25 tim11 阅读(150) 评论(0) 推荐(0)