讨论 / 为什么DP会受到数据顺序的影响?
prime 2012-02-06 07:32:00
点我顶贴 收藏 删除
#include<fstream>

#include<vector>

using namespace std;

inline int max(int a,int b)

{

return a>b?a:b;

}

int main()

{

ifstream fin("happy.in");

ofstream fout("happy.out");

int N,m;

fin>>N>>m;

int* v=new int[m];

int* l=new int[m];

for(int i=0;i!=m;++i)

{

fin>>v[i];

int p;

fin>>p;

l[i]=v[i]*p;

}

vector<vector<int> > A;

A.resize(m);

for(int i=0;i!=m;++i)

A[i].resize(N);

for(int i=0;i!=m;++i)

A[i][0]=0;

for(int j=0;j!=N;++j)

A[0][j]=0;

for(int i=1;i!=m;++i)

for(int j=1;j!=N;++j)

{

if(v[i]>j)

A[i][j]=A[i-1][j];

else if(v[i]<=j)

A[i][j]=max(A[i-1][j],A[i-1][j-v[i]]+l[i]);

}

fout<<A[m-1][N-1]<<endl;

return 0;

}

能过4个点,对不能过的点进行过实验,把测试数据前半部分与后半部分(除了第一行)交换位置就能过,为什么?哪错了?

查看更多回复
提交回复