HDU 4508 湫湫系列故事——减肥记I

来源:互联网 发布:小天才手表显示无网络 编辑:程序博客网 时间:2024/05/22 08:01

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4508


解题思路:

赤裸裸的完全背包。

虽然题目没有说食物是不是能吃多次,但是我们从第2个样例就能看出来这是个完全背包问题。


源代码:

#include<stdio.h>#include<iostream>#include<stdlib.h>#include<cmath>#include<string>#include<vector>#include<algorithm>using namespace std;typedef long long LL;struct node{    int c,v;}s[105];int n,m;int dp[100005];     //容量为i最多能得到的价值bool cmp(node a,node b){    if(a.c==b.c)    return a.v>b.v;    return a.c<b.c;}void Zeroonepack(int c,int v){    int i;    for(i=c;i<=m;i++)    {        dp[i]=max(dp[i],dp[i-c]+v);    }    return;}int main(){    freopen("in.txt","r",stdin);    int i;    while(scanf("%d",&n)==1)    {        for(i=1;i<=n;i++)            scanf("%d%d",&s[i].v,&s[i].c);        scanf("%d",&m);        sort(s,s+n,cmp);        memset(dp,0,sizeof(dp));        for(i=1;i<=n;i++)        {            if(s[i].c>s[i-1].c && s[i].v<s[i-1].v)  continue;            Zeroonepack(s[i].c,s[i].v);        }        printf("%d\n",dp[m]);    }    return 0;}

原创粉丝点击