• 背包变形--P1759 通天之潜水


    *传送

    这道题就是二维背包加输出具体方案,二维就可以直接在一维背包上多加一维,循环的时候多套一层就ok了。至于记录方案我们可以发现,每一种状态都是由上一种状态转移过来的。我们用$ans[][]$表示状态,则有$ans[j][k]=ans[j-a[i]][k-b[i]]+char(i)$;最后输出$ans[m][v]$即可。

    所以代码如下:

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstdio>
     4 #include <cmath>
     5 using namespace std;
     6 long long m,v,n;
     7 long long a[10001],b[10001],c[10001];
     8 long long f[1001][1001];
     9 string s[1001][1001];
    10 int main(){
    11     cin>>m>>v>>n;
    12     for(long long i=1;i<=n;i++){
    13         cin>>a[i]>>b[i]>>c[i];
    14     }
    15     for(long long i=1;i<=n;i++){
    16         for(long long j=m;j>=a[i];j--){
    17             for(long long k=v;k>=b[i];k--){
    18                 if(f[j-a[i]][k-b[i]]+c[i]>f[j][k]){
    19                     f[j][k]=f[j-a[i]][k-b[i]]+c[i];
    20                     s[j][k]=s[j-a[i]][k-b[i]]+char(i);
    21                 }
    22             }
    23         }
    24     }
    25     cout<<f[m][v]<<endl;
    26      for(long long i=0;i<s[m][v].size();i++){
    27         long long temp=s[m][v][i];
    28         cout<<temp<<" ";
    29     }
    30     cout<<endl;
    31     return 0;
    32 }
  • 相关阅读:
    计算机是如何启动的
    比特币
    区块链技术
    哈夫曼树与哈夫曼编码
    Prim Algoritm(最小生成树)
    机器学习概述总览
    线性查找算法(BFPRT)
    DFS(深度优先搜索)
    BFS(广度优先搜索)
    (Dijkstra)迪杰斯特拉算法-最短路径算法
  • 原文地址:https://www.cnblogs.com/very-beginning/p/12444213.html
Copyright © 2020-2023  润新知