首页 > 其他分享 >ACM预备队-week8(DP2)

ACM预备队-week8(DP2)

时间:2022-12-26 21:01:33浏览次数:53  
标签:背包 DP2 int cin long week8 ACM include DP

1.疯狂的采药

完全背包

题目链接:P1616 疯狂的采药 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define int long long
 4 const int N=10010;
 5 const int M=1e7+5;
 6 int T,m;
 7 int t[N],w[N],f[M];
 8 signed main()
 9 {
10     cin>>T>>m;
11     for(int i=1;i<=m;i++)cin>>t[i]>>w[i];//读入m个物品的体积和权重
12     
13     for(int i=1;i<=m;i++)
14         for(int j=t[i];j<=T;j++)
15             f[j]=max(f[j],f[j-t[i]]+w[i]);
16             
17     cout<<f[T];
18     return 0;
19 }

2.樱花

题目链接:P1833 樱花 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

多重背包二进制优化

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int mod=100007;
 4 long long DP[10086110];
 5 long long w[10086110],v[10086110];
 6 long long n,j,V,W,S,num,hh1,ll1,hh2,ll2,T;
 7 char a,b;
 8 int main()
 9 {
10     cin>>hh1>>a>>ll1>>hh2>>b>>ll2>>n;
11     T=(hh2-hh1)*60+(ll2-ll1);
12     //cout<<hh1<<a<<ll1<<hh2<<b<<ll2<<endl;
13    // cout<<T<<endl;
14     for(int i=0;i<n;i++)
15     {
16         cin>>W>>V>>S;
17         if(!S)S=999999999;
18             for(int j=1;j<=S;j*=2)//二进制优化
19             {
20                 v[num]=V*j;
21                 w[num++]=W*j;
22                 S-=j;
23             }
24             if(S)//判断是否剩余
25             {
26                 v[num]=S*V;
27                 w[num++]=S*W;
28             }
29     }
30     for(int i=0;i<num;i++)//货物
31     {
32         for(int j=T;j>=w[i];j--)
33         {
34             DP[j]=max(DP[j-w[i]]+v[i],DP[j]);
35         }
36     }
37    // for(int i=0;i<=T;i++)
38     cout<<DP[T]<<endl;
39 }

3.摆花

题目链接:P1077 [NOIP2012 普及组] 摆花 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

DP,多重背包问题,背包问题求方案数

将花盆数量看作背包容量;
将花看作物品,体积是1,第 ii 种物品最多选 aiai 个;
问题:将背包装满的方案数是多少?

 1 #include <iostream>
 2 #include <algorithm>
 3 
 4 using namespace std;
 5 
 6 const int N = 110, mod = 1000007;
 7 
 8 int n, m;
 9 int f[N];
10 
11 int main()
12 {
13     cin >> n >> m;
14 
15     f[0] = 1;
16     for (int i = 0; i < n; i ++ )
17     {
18         int a;
19         cin >> a;
20         for (int j = m; j >= 0; j -- )
21             for (int k = 1; k <= j && k <= a; k ++ )
22                 f[j] = (f[j] + f[j - k]) % mod;
23     }
24 
25     cout << f[m] << endl;
26 
27     return 0;
28 }

4.金明的预算方案

分组背包

在枚举四种组合时可以使用二进制的思想,可以简化代码。

题目链接:P1064 [NOIP2006 提高组] 金明的预算方案 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 1 #include <cstring>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <vector>
 5 
 6 #define v first
 7 #define w second
 8 
 9 using namespace std;
10 
11 typedef pair<int, int> PII;
12 
13 const int N = 60, M = 32010;
14 
15 int n, m;
16 PII master[N];
17 vector<PII> servent[N];
18 int f[M];
19 
20 int main()
21 {
22     cin >> m >> n;
23 
24     for (int i = 1; i <= n; i ++ )
25     {
26         int v, p, q;
27         cin >> v >> p >> q;
28         p *= v;
29         if (!q) master[i] = {v, p};
30         else servent[q].push_back({v, p});
31     }
32 
33     for (int i = 1; i <= n; i ++ )
34         for (int u = m; u >= 0; u -- )
35         {
36             for (int j = 0; j < 1 << servent[i].size(); j ++ )
37             {
38                 int v = master[i].v, w = master[i].w;
39                 for (int k = 0; k < servent[i].size(); k ++ )
40                     if (j >> k & 1)
41                     {
42                         v += servent[i][k].v;
43                         w += servent[i][k].w;
44                     }
45                 if (u >= v) f[u] = max(f[u], f[u - v] + w);
46             }
47     }
48 
49     cout << f[m] << endl;
50 
51     return 0;
52 }

 

标签:背包,DP2,int,cin,long,week8,ACM,include,DP
From: https://www.cnblogs.com/Zac-saodiseng/p/17006891.html

相关文章

  • 使用Acme.sh免费签发SSL证书
    github:​​https://github.com/acmesh-official/acme.sh​​ 概述一个纯粹用Shell(Unixshell)语言编写的ACME协议客户端。完整的ACME协议实施。支持ACMEv1和ACMEv2支持......
  • 「杂题乱写」AtCoderDP26 题
    「杂题乱写」AtCoderDP26题\(\text{AtCoderDP26}\)题题单。前言最近听说\(\text{AtCoder}\)上有个\(\text{DP26}\)题挺好的,于是向@\(\text{SoyTony}\)要了题单......
  • ACME:通过DNS方式添加证书
    在通常情况下,用DNSAPI方式自动注册证书是最好的方式,但是如果域名服务商不支持API方式,然后又想注册泛域名的话,就只能通过DNS手动方式来操作。首先第一步,调用issue参数来......
  • dp2
    P1616疯狂的采药完全背包,一维数组正着做就可以#include<bits/stdc++.h>usingnamespacestd;intv[100200],t,m;intf[100020],w[100020];intmain(){ cin......
  • ACM预备队-week7(DP)
    1.[NOIP2005普及组]采药题目链接:P1048[NOIP2005普及组]采药-洛谷|计算机科学教育新生态(luogu.com.cn)01背包,可以利用滚动数组优化为一维。1#include<bit......
  • 一个新ACMer的刷题记录捏(Round.694) codeforces ABC
    A.StrangePartitionProblem-A-Codeforces  2022-12-1514:00:52​#include<bits/stdc++.h>#defineintlonglongconstintN=100010;usingnamespac......
  • 计算机结构--week8--Bus and I/O
                     directmemoryaccess:   ......
  • 大学生程序设计创新实践基地2022年冬季校赛(NPU ACM Winter Contest)
    大学生程序设计创新实践基地2022年冬季校赛(NPUACMWinterContest)总述总体考察对于板子的熟练变换,以及考察离谱地使用python和对getchar()以及EOF的基础掌握程度。B,D,E......
  • week8
    完成作业:\1.redis搭建哨兵原理和集群实现。\2.LVS常用模型工作原理,及实现。\3.LVS的负载策略有哪些,各应用在什么场景,通过LVSDR任意实现1-2种场景。\4.webhttp协......
  • 011.开发RBACModel层(了解某一个用户能使用那些功能)
    1.增加rbac.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dt......