关注
第三题是二位花费的背包问题,每件物品要花费0和1各x和y个,总共有n个0和m个1,问每件物品最多取一次,最多可以取多少物品,递归公式为a[j][k]
=
max(a[j-thing[i].x][k-thing[i].y,a[j][k]),其中thing[i].x为第i件物品消耗多少个x,thing[i].y为第i件物品消耗1的个数。
我的代码:(100%通过)
#include
<iostream>
using
namespace
std
;
struct
thing {
int
x;
//
需要
0
的个数
int
y;
//
需要
1
的个数
thing(){
x
=
0
;
y
=
0
;
}
};
int
maxx(
int
x,
int
y)
{
if
(x<y)
return
y;
return
x;
}
int
main(
int
argc,
const
char
* argv[]) {
int
x,n,m;
cin
>>x>>n>>m;
string
s[
55
];
thing
th[
55
];
int
a[
555
][
555
];
for
(
int
i=
0
;i<x;i++)
cin
>>s[i];
for
(
int
i=
0
;i<x;i++)
for
(
int
j=
0
;j<s[i].
length
();j++)
{
if
(s[i][
j
] ==
'0'
)
th[i].
x
++;
else
if
(s[i][
j
] ==
'1'
)
th[i].
y
++;
}
for
(
int
i=
0
;i<=n;i++)
for
(
int
j=
0
; j<=m;j++)
a[i][j]=
0
;
//
边界
int
ans=
0
;
for
(
int
i=
1
;i<=x;i++)
for
(
int
j=n;j>=th[i-
1
].
x
;j--)
for
(
int
k=m;k>=th[i-
1
].
y
;k--)
{
a[j][k]=
maxx
(a[j][k],a[j-th[i-
1
].
x
][k-th[i-
1
].
y
]+
1
);
if
(a[j][k]>ans)
ans=a[j][k];
}
cout
<<ans<<
endl
;
return
0
;
}
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享
07-30 18:43
门头沟学院 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你遇到最难的面试题目是_ #
14537次浏览 192人参与
# 反问环节如何提问 #
95415次浏览 1949人参与
# 中兴秋招 #
203261次浏览 2272人参与
# 简历上的经历如何包装 #
23334次浏览 713人参与
# 如何看待offer收割机的行为 #
815124次浏览 6086人参与
# 你最讨厌面试问你什么? #
24331次浏览 280人参与
# 秋招最大的收获是什么? #
38568次浏览 323人参与
# 我的实习收获 #
90796次浏览 1038人参与
# 26届的你,投了哪些公司? #
35987次浏览 427人参与
# 滴滴求职进展汇总 #
233206次浏览 2116人参与
# 作业帮求职进展汇总 #
56975次浏览 376人参与
# 初创公司值得加入吗? #
27275次浏览 194人参与
# 我对___祛魅了 #
42674次浏览 405人参与
# 数字马力求职进展汇总 #
184406次浏览 1500人参与
# 你跟室友的关系怎么样? #
5904次浏览 94人参与
# 什么样的背景能拿SSP? #
30444次浏览 197人参与
# 工作中哪个瞬间让你想离职 #
60239次浏览 543人参与
# 和同事相处最忌讳的是__ #
20796次浏览 214人参与
# 去年你投递实习了吗? #
22843次浏览 331人参与
# 如何快速融入团队? #
14632次浏览 179人参与
# 机械人的金三校招总结 #
36163次浏览 461人参与