讨论 / 牛人回答....关于初始值的问题
世纪末的魔术师 2011-07-13 04:32:00
点我顶贴 收藏 删除
我这题f[]的初始值如果是-1或0之类的可以5个点,如果是-32767的话可以过9个点,如果是-32768即-maxint的话就可以AC...为什么会这样....

#include<iostream>

using namespace std;

long long n,m,best=0,i,j;

long a[5001],w[100001],v[5001];

const int maxint=2<<15-1;

inline long max(long a,long b){return a>b?a:b;}

main(){

cin>>n>>m;

for(i=1;i<=m;i++)w[i]=-maxint;//就这里的问题

for(i=1;i<=n;i++)cin>>a[i]>>v[i];

for(i=1;i<=n;i++)

for(j=0;j<=m;j++)

if(j-a[i]>=0)w[j]=max(w[j],w[j-a[i]]+v[i]);

cout<<w[m];

}

#1 世纪末的魔术师@2008-07-02 22:44:00
回复 删除
为何没人回答?
#2 000wang@2008-07-04 05:33:00
回复 删除
会不会是评策机不稳定

我是学pascal di

bu hao yi si

shan le

#3 sxpeter@2008-07-04 06:43:00
回复 删除
显然,DP时的初始值必须为负无穷大

否则会干扰数据的计算

#4 ycb007@2009-07-08 04:19:00
回复 删除
恰好用完时的最大值<=无此限制时所能达到的最大值。

当max{v(用完)}<max{v(未用完)}-1时初值不能为-1。

#5 烨毅@2011-07-13 04:32:00
回复 删除
回复 楼主世纪末的魔术师 的帖子

只要w[0]=0, w[1] to w[m]=-maxlongint就可以了

查看更多回复
提交回复