您的位置:首页 > 其它

第7周作业1——背包问题

2014-06-09 14:54 369 查看
(1)背包问题。对上文中提到的背包问题提供的表1(数据文件下载Knapsack.txt,第一行为背包总重量15,物品数量5;第2-6行,分别为第1-5件物品的重量与价值),W=15,编程计算最终背包所装物品的编号、总重量与总价值。要求能够把构造的二维表格输出到文件KnapsackResult.txt中.

package suanfa6;
import java.io.File;
import java.io.FileOutputStream;
public class Attribute {
static public int MaxSize=20;  //设置容量
static public int Weight[]={4,12,1,2,1}; //物品的重量
static public int Value[]={10,4,2,2,1}; //物品的价值
static public int Result[]={-1,-1,-1,-1,-1};//初始化背包

public class Bag {

public static void main(String[] args) {

Bag bag=new Bag();
System.out.println(bag.get(4,15));
bag.print();
bag.writeIntoFile(Attribute.Result);

}
public void print(){
for(int i=0;i<Attribute.Result.length;i++)
{
System.out.println(Attribute.Result[i]);
}
}
//递归方式求解
public int get(int n ,int count)
{
if(n==-1||count==0)
return 0;
int tmp1=get(n-1,count);
if(Attribute.Weight
>count)
{
Attribute.Result
=0;
return tmp1;
}
int tmp2=Attribute.Value
+get(n-1,count-Attribute.Weight
);
if(tmp1>tmp2)
{
Attribute.Result
=0;
return tmp1;
}
Attribute.Result
=1;
return tmp2;
}

//写入txt
public  void writeIntoFile(int[] list) {
File f = new File("src/KnapsackResult.txt");
FileOutputStream fou = null;
try {
fou = new FileOutputStream(f, true);
for (int i = 0; i < list.length; i++) {
String s = String.valueOf(list[i]);
String a = "" + s + "\t\n";
// byte []bytes=new byte[1024];
// 如何把string转换byte数组
fou.write(a.getBytes());

}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
fou.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: