HDOJ 2159 FATE

来源:互联网 发布:怎么让胃变小 知乎 编辑:程序博客网 时间:2024/06/06 08:35

状态表示:d(i,j,k) 表示 前i个怪兽,在 j 耐力下,在 k 最大怪物数下,最多经验值

状态转移:d(i,j,k) --> max(d(i-1,j-V*n,k-n)+W*n  , n∈(1~k))

利用滚动数组 并不一定需要一维 i 来一记录第几个怪物,所以只需要二维数组保存



#include<iostream>#include<cstdio>#include<cstring>#include<algorithm> using namespace std;const int maxn=100+5;int d[maxn][maxn];  //d(i,j) i耐力,j怪物数 下最多经验值 int main(){int n,m,k,s;int W,V;while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF){memset(d,0,sizeof(d));int ans=-1;for(int i=1;i<=k;i++){cin>>W>>V;for(int j=0;j<=m;j++)  //耐力for(int l=s;l>=1;l--)  //怪物数if(j>=V) {d[j][l]=max(d[j][l],d[j-V][l-1]+W);if(d[j][l]>=n) ans=max(ans,m-j);}}printf("%d\n",ans);} return 0;} 




0 0
原创粉丝点击