2016級演算法第三次上機-E.SkyLee狩獵魔物
阿新 • • 發佈:2018-12-09
這道題本質上還是一個完全揹包的問題
需要注意的點還是:
1.要求裝滿首先是講一維初始化問題 至於是正無窮還是負無窮要根據問題而定。
2.min OR max?
#include <iostream> #include <algorithm> #include <cstring> using namespace std; const int maxlen=1e3 + 10; const int INF = 0x3f3f3f; int weight[maxlen]; int value[maxlen]; int dp[maxlen];View Codeint main(){ int i,j,k,n; while(~scanf("%d",&n)){ for(i=1;i<=n;i++){ scanf("%d",&value[i]); weight[i]=i; } memset(dp,INF,sizeof(dp)); dp[0]=0; for(i=1;i<=n;i++) for(j=weight[i];j<=n;j++) dp[j]=min(dp[j],dp[j-weight[i]]+value[i]); printf("%d\n",dp[n]); } return 0; }