HDU 4508——湫湫系列故事——减肥记I
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4508
解题思路:这是一道完全背包问题,与01背包不同的是,每件物品可以取多次。
参考链接:http://www.cnblogs.com/gongxijun/archive/2013/08/08/3246513.html
代码:
1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int n; 8 while(scanf("%d",&n)!=EOF&&n) 9 { 10 int dp[1010]={0};//dp是最大值,b是当前数 11 int b[1010]={0}; 12 for(int i=0;i<n;i++) 13 { 14 int temp=0; 15 int max=-1; 16 scanf("%d",&temp); 17 b[i]=temp; 18 bool find=false; 19 for(int j=0;j<i;j++) 20 { 21 if((b[j]<temp)&&(dp[j]+temp>max)) 22 { 23 max=dp[j]+temp; 24 find=true; 25 } 26 } 27 if(find) 28 dp[i]=max; 29 else 30 dp[i]=b[i]; 31 } 32 int out=-1; 33 for(int i=0;i<n;i++) 34 { 35 if(out<dp[i]) out=dp[i]; 36 } 37 printf("%d\n",out); 38 } 39 return 0; 40 }