问题 A: 背包问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 518 解决: 260
[提交][状态][讨论版]
有个背包可承受重量N,现有T类物品
每类物品重量为Wi,价值为Vi ,每类物品的数量是无穷的,
这个背包可以装载物品的最大价值是多少?
一行,N T 之间用空格隔开
后面t行,每行:重量Wi,价值Vi
测试数据来源http://blog.csdn.net/na_beginning/article/details/62884939!
name | weight | value | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
d | 7 | 9 | 0 | 0 | 1 | 3 | 5 | 5 | 6 | 9 | 10 | 10 | 12 |
c | 4 | 5 | 0 | 0 | 1 | 3 | 5 | 5 | 6 | 8 | 10 | 10 | 11 |
b | 3 | 3 | 0 | 0 | 1 | 3 | 3 | 4 | 6 | 6 | 7 | 9 | 9 |
a | 2 | 1 | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 |
static int[][] F; // 模拟一个(背包容量,物品价值)的表格
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
F[i][j] = F[i - 1][j];/* 不放时候的价值 */
/* 如果放入这件物品之后的价值大于不放,则选择放入物品 */
* C[i] <= j (代表这个物品能装进) && F[i][j] < F[i][j -
* C[i]](代表装上一件物品,已经背包空间正好或者大于能装下这件物品的空间时,这个背包的价值) +
* W[i](加上这件物品的价值) 判断,若是价值更大,则保存这个 结果
if (C[i] <= j && F[i][j] < F[i][j - C[i]] + W[i]) {