#1043 : 完全背包

与01背包区别是:need[i]可以重复

import java.util.*;
public class Main {
public static void main(String[] args)
{
//用一维数组实现
Scanner sc=new Scanner(System.in);
int n,m;
n=sc.nextInt();
m=sc.nextInt();
int need[] =new int[n];
int val[]=new int[n];
int f[]=new int[m+1];

for(int i=0;i<n;i++)
{
need[i]=sc.nextInt();
val[i]=sc.nextInt();
}
for(int i=0;i<n;i++)
{
// for(int j=m;j>=need[i];j--) 01背包解法
for(int j=need[i];j<=m;j++)
{

f[j]=Math.max(f[j],f[j-need[i]]+val[i]);
}
}
System.out.println(f[m]);
}
}

举这个例子好理解

3 8
4 8
2 5
3 10

posted @ 2017-08-12 17:21  code666  阅读(170)  评论(0编辑  收藏  举报