zoukankan      html  css  js  c++  java
  • 背包变形--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 }
  • 相关阅读:
    [转]ARM平台下独占访问指令LDREX和STREX
    ARM MMU
    在字符串中查找子字符串并提取它
    获得字符串的长度
    连接字符串
    循环用于迭代数组中的项目
    循环的标准
    if ... else 语句
    添加一个图像切换器
    css 中的z-index
  • 原文地址:https://www.cnblogs.com/very-beginning/p/12444213.html
Copyright © 2011-2022 走看看