#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <limits>
#include <conio.h>
using namespace std;
#define MAXN 100
int _tmain(int argc, _TCHAR* argv[])
{
int cost[MAXN], w[MAXN];
int n,TotalW,weight,i;
bool take[MAXN][MAXN];
int *dp;
ifstream inp("data.txt");
if(inp.fail())
{
cout <<"error! file not found!"<< endl;
cout <<"Press any key to exit..."<< endl;
_getch();
return 0;
}
inp >> n; inp >> TotalW;
for(i = 1; i <= n; i++)
{
inp >> w; inp >> cost;
}
inp.close();
for(i = 0; i <= TotalW; i++)take[0] = false;
dp = new int[TotalW+1];
dp[0]=0;
for( weight = 1; weight <=TotalW; weight++)
{
dp[weight] = numeric_limits<int>::min();
for (i = 1; i <= n; i++)
{
if (w <= weight)
{
dp[weight] = max(dp[weight], dp[weight - w] + cost);
take[weight] = true;
}
else
{
dp[weight]=dp[weight-1];
take[weight] = false;
}
}
cout <<"Weight: "<<weight<<" price: "<<dp[weight]<<endl;
}
cout <<endl;
cout <<"Best price: "<< dp[TotalW] <<endl;
delete[] dp;
weight = TotalW;
//выводим взятые товары
cout <<"taken goods: ";
int p=0,s=0,res;
while (weight > 0)
{
i = n-1;
while (i >= 0 && !take[weight]) i--;
if (i >= 0)
{
cout << i+1 <<" ";
if(i == 0) p++;
if(i == 1) s++;
weight = weight-w;
}
else weight = 0;
}
res = w[1]*p+w[2]*s;
//выводим вес взятых товаров
cout <<endl<<"weight taken goods: "<<res<<endl;
cout <<"Press any key to exit..."<<endl;
_getch();
return 0;
}
Visual Studio 2008 и компиляция проекта
В заранее большое спасибо!
ну давай сюда свой код... посмотрим на него. ибо обычно то всё в порядке.
это задача о ранце
Код:
ifstream inp("data.txt");
из этого сразу напрашивается вопрос: а файл data.txt всегда кидался в папку с экзешником?
да конечно...
и дебаггер в VS этого не делает... но в релизе он инициализируется нулями.
после добавления этого куска:
Код:
int cost[MAXN], w[MAXN];
int n, TotalW, weight,i;
bool take[MAXN][MAXN];
int *dp;
[COLOR="Blue"]for(int i = 0; i < MAXN; ++i)
for(int j = 0; j < MAXN; ++j)
take[j] = 0;[/COLOR]
int n, TotalW, weight,i;
bool take[MAXN][MAXN];
int *dp;
[COLOR="Blue"]for(int i = 0; i < MAXN; ++i)
for(int j = 0; j < MAXN; ++j)
take[j] = 0;[/COLOR]
release и debug программы стали давать идентичный вывод.
возможно поэтому не работает правильно:
Код:
while (i >= 0 && !take[weight]) i--;
или ещё что-то(я не делал полноценный проход дебагером)...
да это проблему устранило... правда результат работы проги неправильный стал....)) главное Цену выводит правильно а набор взятых товаров нет.....
Цитата: paska
да это проблему устранило... правда результат работы проги неправильный стал....)) главное Цену выводит правильно а набор взятых товаров нет.....
ну это уже проблемы работы логики программы) так что дебаггер в руки и вперёд:)