hdu 3732 Ahui Writes Word
这是一道背包题,当你题读完了的时候,你会觉得这道题明明就是01背包的完全版吗!
no no no no no no no no no no no~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
~~~~~~~~~~~~~~~~~~~~~
对!不是,是,还是不是,是~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
好吧,这是一道01背包题,但按01背包做会超时,我之所以知道是因为我做过按01背包!
这道题的妙处在于转化为多重背包!,对,这就是这道题的妙处!我喜欢这道题的这一点!!!!
背包好久没看了!哎····,也忘得差不多了!!!
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><<><<K<<><><><><><><<><><><><><><><><><><><<
#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
int bb[500010],q,vv;
void shun(int cost,int weight)
{
int i;
for(i=cost;i<=vv;i++)
bb[i]=max(bb[i],bb[i-cost]+weight);
}
void ni(int cost,int weight)
{
int i;
for(i=vv;i>=cost;i--)
bb[i]=max(bb[i],bb[i-cost]+weight);
}
int main()
{
char str[5000];
int n,w[5001],v[5001],i,j,amount[5001],v1,w1,k;
while(scanf("%d %d",&n,&vv)!=EOF)
{
memset(amount,0,sizeof(amount));
q=0;
for(i=1;i<=n;i++)
{
scanf("%s %d %d",str,&w1,&v1);
for(j=0;j<q;j++)
if(w1==w[j]&&v1==v[j])
{
amount[j]++;
break;
}
if(j==q)
{
w[q]=w1;v[q]=v1;
amount[q]=1;
q++;
}
}
memset(bb,0,sizeof(bb));
for(i=0;i<q;i++)
{
if(v[i]*amount[i]>=vv)
shun(v[i],w[i]);
else
{
k=1;
while(k<=amount[i])
{
ni(k*v[i],k*w[i]);
amount[i]-=k;
k*=2;
}
ni(amount[i]*v[i],amount[i]*w[i]);
}
}
printf("%d\n",bb[vv]);
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732
hdu 3732 Ahui Writes Word的更多相关文章
- HDU 3732 Ahui Writes Word(多重背包)
HDU 3732 Ahui Writes Word(多重背包) http://acm.hdu.edu.cn/showproblem.php? pid=3732 题意: 初始有N个物品, 每一个物品有c ...
- HDU 3732 Ahui Writes Word 多重背包优化01背包
题目大意:有n个单词,m的耐心,每个单词有一定的价值,以及学习这个单词所消耗的耐心,耐心消耗完则,无法学习.问能学到的单词的最大价值为多少. 题目思路:很明显的01背包,但如果按常规的方法解决时间复杂 ...
- hdoj 3732 Ahui Writes Word (多重背包)
之前在做背包的题目时看到了这道题,一看,大喜,这不是裸裸的01背包吗!! 然后华丽丽的超时,相信很多人也和我一样没有考虑到数据量的大小. 时隔多日,回过头来看这道题,依旧毫无头绪....不过相比之前 ...
- 3732 Ahui Writes Word
// N个物品 放进容量为C的背包里面 要求价值最大// 一看 第一反应是0 1背包 不过 N=100000 C=10000// 注意到 v,c在 10以内// 那么 最多就100种组合了 然后就转化 ...
- 【HDOJ】3732 Ahui Writes Word
初看01背包,果断TLE.是因为n和C都比较大.但是vi和ci却很小,转化为多重背包. #include <cstdio> #include <cstring> ][]; ]; ...
- Ahui Writes Word
Ahui Writes Word Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 3732
#include<stdio.h> #include<string.h> int n,m,dp[10001]; int max(int a,int b) { return a ...
- 【二进制拆分多重背包】【HDU1059】【Dividing】
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- HDU3732 背包DP
Ahui Writes Word Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
随机推荐
- C#实现无物理边距真正可打印区域的绘图\打印程序开发
经常在开发实际的应用程序中,需要用到图形绘制和打印程序.如何实现完整的精确打印和绘图是需要注意许多细节地方的.最近在遇到打印问题的时候,仔细研究一阵,总结这篇博文,写得有点杂乱,看文要还请费点神. 基 ...
- Android 删除短信
1.删除短信的函数,一条一条的删除所有短信 /* * Delete all SMS one by one */ public void deleteSMS() { try { ContentResol ...
- CF GYM 100703A Tea-drinking
题意:龙要制作n个茶,每个茶的配方是一个字符串,两个字符串之间有一个差值,这个差值为两个字符串每个对应字母之间差的绝对值的最大值,求制作所有茶时获得的所有差值中的最大值. 解法:克鲁斯卡尔.将茶的配方 ...
- 法律网站分类 zt
法律网站分类 一.北大类 中国法律信息网(北大法学院)www.Chinalawinfo.com 北大金融法研究中心 www.pkufli.net 宪政知识网(北大法学院)www ...
- Clone PDB from same CDB
Clone PDB 用途: 1.用于测试,从生产系统clone数据来进行测试 2.诊断性能问题 Clone PDB Using OMF from same CDB 环境信息: DB Version ...
- 时间管理(GTD)
今天中午看了30分钟老王讲战胜拖延症和时间管理 视频地址:多呗课堂 贴两个总结的图在此: 计划中使用的四象限法和十八分钟法很好. 今年多研究研究,实践一下Geting Things Done.
- bzoj 2820 YY的GCD(莫比乌斯反演)
Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻× ...
- Hdu 5289-Assignment 贪心,ST表
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Assignment Time Limit: 4000/2000 MS (Java/Others) ...
- flappy pig小游戏源码分析(3)——解剖util
这一节我们继续高歌猛进,如果对源码中有无论无何都理解不通的问题,欢迎和我交流,让我也学习一下,我的qq是372402487. 还是按照惯例看看我们的目录结构. 我们在前两节中已经分析了game.js, ...
- Good practice release jar to Nexus
Step suppose you need to develop a feature,when you finish the feature ,you need to release the jar ...