您的位置:首页 > 其它

Vijos 1104 采药

2014-03-26 22:37 176 查看

背包一直是心中的痛。

今天一群大神聊天,说递归,DP,图论 是程序员的三道坎。

好吧。我现在要跨过第二个。

状态转移图。

就是把 a[总时间]=max(a[上一个药+这个药]+这个药的价值,a[总时间];

AC代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[1001];
struct lx
{
    int t,s;
}l[101];
int n,m;
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        for(int i=1;i<=m;i++)
        scanf("%d%d",&l[i].t,&l[i].s);
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=m;i++)
        {
            for(int j=n;j>=l[i].t;j--)
            dp[j]=max(dp[j],dp[j-l[i].t]+l[i].s);
        }
        int tmp=0;
        for(int i=0;i<=n;i++)
        tmp=max(tmp,dp[i]);
        printf("%d\n",tmp);
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: