zoukankan      html  css  js  c++  java
  • 洛谷P1417 烹调方案

    洛谷P1417 烹调方案
    如果是一般的01背包的话
    选的先后是没关系的
    但是这题选的先后是有关系的,因为他的价值是随着时间而变化的,
    而你的01背包是做不到先选2再选1的
    那么我们就跟国王游戏一样 用一个优先值对他们就行排序,表示如果初始价值相同
    应该怎么选,这其实就是国王游戏,然后我们用贪心原则将他们
    排好序,然后再来一遍01背包就行了

     1 #include <bits/stdc++.h> 
     2 #define For(i,j,k) for(int i=j;i<=k;i++) 
     3 #define int long long 
     4 using namespace std ; 
     5 
     6 const int N = 52 ; 
     7 struct node{
     8     int a,b,c ; 
     9 }m[N];
    10 int n,T,ans ; 
    11 int f[100011] ; 
    12 
    13 inline int read() 
    14 {
    15     int x = 0 , f = 1 ; 
    16     char ch = getchar() ; 
    17     while(ch<'0'||ch>'9') { if(ch=='-') f = -1 ; ch = getchar() ; } 
    18     while(ch>='0'&&ch<='9') { x = x * 10+ch-48 ; ch = getchar() ; } 
    19     return x * f ;  
    20 }
    21 
    22 inline bool cmp(node x,node y) 
    23 {
    24     return x.c * y.b < y.c * x.b;
    25 }
    26 
    27 signed main() 
    28 {
    29     T = read() ; n = read() ; 
    30     For(i,1,n) m[i].a = read() ; 
    31     For(i,1,n) m[i].b = read() ; 
    32     For(i,1,n) m[i].c = read() ; 
    33     sort(m+1,m+n+1,cmp) ; 
    34     For(i,1,n) 
    35       for(int j=T;j>=m[ i ].c;j--) 
    36           f[ j ] = max( f[j],f[j-m[i].c]+m[i].a-m[i].b*j ) ;  
    37     int ans = 0 ; 
    38     For(i,0,T) 
    39         if( f[ i ] > ans ) ans = f[ i ] ; 
    40     printf("%d
    ",ans) ; 
    41     return 0 ; 
    42 }
  • 相关阅读:
    Django学习笔记(进阶篇)
    Django学习笔记(基础篇)
    vim的使用
    PyCharm默认文件头部的设置
    Django的内置登录、退出、修改密码方法
    vbox manjaro 无法挂载共享文件 解决办法
    vbox虚拟机 无法启动 新任务
    Ubuntu安装输入法
    安装 protobuf
    Manjaro.常用命令
  • 原文地址:https://www.cnblogs.com/third2333/p/7484247.html
Copyright © 2011-2022 走看看