P1060 [NOIP2006 普及组] 开心的金明
rt,状态转移方程处,我用dp[j]来存结果
第一次循环,dp[j]=0,dp[j−v]+zong[i] =1600,因为 max 在,dp[j]应为1600
但是循环完后 dp[j] 仍然为0
尝试过不用 max 直接让 dp[j] 等于 dp[j−v]+zong[i] ,还是无法赋值
蒟蒻实在懵了,请问如何解决,谢谢!!
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn=5005;
int i,j,dp[maxn],zong[maxn];
int main(){
int money,num,v,p;
cin>>money>>num;
for(int i=0;i<num;i++){
scanf("%d%d",&v,&p);
zong[i]=v*p;
}
for(int i=1;i<=num;i++){
for(int j=money;j>=v;j--){
if(j >= v)
dp[j]=max(dp[j],dp[j-v]+zong[i]);
}
}
cout<<dp[num];
return 0;
}