| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
尼玛啊。。。用记忆搜索,二维数组,结果内存爆掉了。。/**
* POJ probem 3624: 0/1 knapsack algorithm
* Basically, use brute force search method (dfs).
* A better way is to use DP.
*
* hellfire (asyncloading#163.com)
* Jan 31th, 2016
*/
#include<iostream>
using namespace std;
int n;
int m;
int martix[12880][2];
int mem[3402][12880];
int dfs(int i, int j)
{
int res;
if (mem[i][j] >= 0)
{
return mem[i][j];
}
if (i == n)
{
res = 0;
}
else if (martix[i][0] > j )
{
res = dfs(i + 1, j);
}
else
{
res = max(dfs(i + 1, j), dfs(i + 1, j - martix[i][0]) + martix[i][1]);
}
return mem[i][j] = res;
}
int main(int argc, char **argv)
{
cin >> n >> m;
int k;
for (k = 0; k < n; k ++)
{
cin >> martix[k][0] >> martix[k][1];
}
memset(mem, -1, sizeof(mem));
int result = dfs(0, m);
cout << result << endl;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator