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 }

 

posted @ 2016-08-12 21:34  shadervio  阅读(243)  评论(0编辑  收藏  举报