K10414 开心的金明 [happy]
今天我们讲一下开心的金明这一题,这一题是NOIP2006年普及组第二题,先看一下题目和样例。
这题明显是动态规划,分为两种情况。
if(v[i]>j){
dp[i][j]=dp[i-1][j];
}
else{
int x=dp[i-1][j];
int y=dp[i-1][j-v[i]]+v[i]*w[i];
dp[i][j]=max(x,y);
}
看一下完整代码吧。
#include<bits/stdc++.h>
using namespace std;
int dp[30][30010],w[10010],v[10010];
int main()
{
int n,c;
cin>>c>>n;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
for(int i=1;i<=n;i++){
for(int j=1;j<=c;j++){
if(v[i]>j){
dp[i][j]=dp[i-1][j];
}
else{
int x=dp[i-1][j];
int y=dp[i-1][j-v[i]]+v[i]*w[i];
dp[i][j]=max(x,y);
}
}
}
cout<<dp[n][c];
return 0;
}
如有错误请及时指出,谢谢观看,拜拜~