• dp之完全背包 hdu--2159一维数组做法


    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    int main()
    {
        int n,m,t,s;
        int dp[205];
        int w[205];
        int v[205];
        int cnt[205];
        while(~scanf("%d %d %d %d",&n,&m,&t,&s))
        {
            memset(dp,0,sizeof(dp));
            memset(cnt,0,sizeof(cnt));
            for(int i=0;i<t;i++)
            {
                scanf("%d %d",&v[i],&w[i]);
            }
            for(int i=0;i<t;i++)
            {
                for(int j=w[i];j<=m;j++)//顺序,如果逆序的话就是01背包的问题了
                {
                    if(dp[j]<dp[j-w[i]]+v[i])
                    {
                        cnt[j]=cnt[j-1]+1;//如果多取一件东西的经验更多的话,就打怪次数增加
                        dp[j]=dp[j-w[i]]+v[i];
                    }
                }
            }
            int ans=-1;
            for(int j=0;j<=m;j++)
            {
                if(dp[j]>=n&&cnt[j]<=s)
                {
                    ans=m-j;
                    break;
                }
            }
             cout<<ans<<endl;
        }
        return 0;
    }

  • 相关阅读:
    扩展欧几里得算法
    Warshall算法
    自己的博客
    使用forever运行web项目
    C#语言基础 Main 函数中的输出输入
    新手第一天学习 C#语言(进制互换)
    Django + Uwsgi + Nginx 实现生产环境部署1
    基于Flask的web微信
    python保存文件UnicodeEncodeError以及reload(sys)后print失效问题
    轮询/长轮询
  • 原文地址:https://www.cnblogs.com/chinacwj/p/7053844.html
Copyright © 2020-2023  润新知