2023年8月1日发(作者:)
NOIP2005普及组第3题采药 (背包问题)NOIP2005普及组第3题 采药 时间限制: 1 Sec 内存限制: 128 MB提交: 50 解决: 23[][][][命题⼈:外部导⼊]题⽬描述⾠⾠是个天资聪颖的孩⼦,他的梦想是成为世界上最伟⼤的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了⼀个难题。医师把他带到⼀个到处都是草药的⼭洞⾥对他说:“孩⼦,这个⼭洞⾥有⼀些不同的草药,采每⼀株都需要⼀些时间,每⼀株也有它⾃⾝的价值。我会给你⼀段时间,在这段时间⾥,你可以采到⼀些草药。如果你是⼀个聪明的孩⼦,你应该可以让采到的草药的总价值最⼤。”
如果你是⾠⾠,你能完成这个任务吗?输⼊第⼀⾏有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),⽤⼀个空格隔开,T代表总共能够⽤来采药的时间,M代表⼭洞⾥的草药的数⽬。接下来的M⾏每⾏包括两个在1到100之间(包括1和100)的整数,分别表⽰采摘某株草药的时间和这株草药的价值。输出包括⼀⾏,这⼀⾏只包含⼀个整数,表⽰在规定的时间内,可以采到的草药的最⼤总价值。
【数据规模】
对于30%的数据,M <= 10;
对于全部的数据,M <= 100。
样例输⼊70 371 10069 11 2样例输出3题⽬的要求是⽤有限的时间获取价值尽可能⾼的草药,所以可以⽤01背包来做。可以假设采药时的最优解是在时间T内i棵,⽤c(i,T)表⽰,此时这个解要么包含i这棵草药,要么不包含,假设采这颗草药的时间为T1,价值为V,如果包含,这个最优解变成了c(i-1,T-T1)+V,如果不包含,这个最优解变成了c(i-1,T),这时只要判断c(i-1,T-T1)+V和c(i-1,T)哪个价值更⼤,哪个就是最优解,即c(i,T)=max(c(i-1,T-T1)+V,c(i-1,T))。现在令第j个草药的价值为v[j],采这个草药的时间为ti[j],i时的价值为h[i],则有h[i]=max(h[i-1],h[i-ti[j]]+v[j])。⽽h[0]为0,我们就得到了最优解的递推公式。代码如下: #include
2023年8月1日发(作者:)
NOIP2005普及组第3题采药 (背包问题)NOIP2005普及组第3题 采药 时间限制: 1 Sec 内存限制: 128 MB提交: 50 解决: 23[][][][命题⼈:外部导⼊]题⽬描述⾠⾠是个天资聪颖的孩⼦,他的梦想是成为世界上最伟⼤的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了⼀个难题。医师把他带到⼀个到处都是草药的⼭洞⾥对他说:“孩⼦,这个⼭洞⾥有⼀些不同的草药,采每⼀株都需要⼀些时间,每⼀株也有它⾃⾝的价值。我会给你⼀段时间,在这段时间⾥,你可以采到⼀些草药。如果你是⼀个聪明的孩⼦,你应该可以让采到的草药的总价值最⼤。”
如果你是⾠⾠,你能完成这个任务吗?输⼊第⼀⾏有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),⽤⼀个空格隔开,T代表总共能够⽤来采药的时间,M代表⼭洞⾥的草药的数⽬。接下来的M⾏每⾏包括两个在1到100之间(包括1和100)的整数,分别表⽰采摘某株草药的时间和这株草药的价值。输出包括⼀⾏,这⼀⾏只包含⼀个整数,表⽰在规定的时间内,可以采到的草药的最⼤总价值。
【数据规模】
对于30%的数据,M <= 10;
对于全部的数据,M <= 100。
样例输⼊70 371 10069 11 2样例输出3题⽬的要求是⽤有限的时间获取价值尽可能⾼的草药,所以可以⽤01背包来做。可以假设采药时的最优解是在时间T内i棵,⽤c(i,T)表⽰,此时这个解要么包含i这棵草药,要么不包含,假设采这颗草药的时间为T1,价值为V,如果包含,这个最优解变成了c(i-1,T-T1)+V,如果不包含,这个最优解变成了c(i-1,T),这时只要判断c(i-1,T-T1)+V和c(i-1,T)哪个价值更⼤,哪个就是最优解,即c(i,T)=max(c(i-1,T-T1)+V,c(i-1,T))。现在令第j个草药的价值为v[j],采这个草药的时间为ti[j],i时的价值为h[i],则有h[i]=max(h[i-1],h[i-ti[j]]+v[j])。⽽h[0]为0,我们就得到了最优解的递推公式。代码如下: #include
发布评论