zoukankan      html  css  js  c++  java
  • 2050编程赛 冰水挑战 HDU 6495

     

    题目地址:https://vjudge.net/problem/HDU-6495

    思路:
    我们需要维护的是挑战了n个之后剩余体力值,剩余体力值越大越好
    dp[N(i)][N(j)],第一个维度,记录当前是第i个挑战,第二个维度记录在当前第i挑战时,对于前1~i个挑战的其中几个是否挑战的情况与之前的情况相比较记录最好的情况。
    1.初始化dp[0][0] = C;
    2.判断你要挑战第x个时,x-1个挑战是否完成,如果x-1个挑战都无法完成,那么x个挑战无法开始
    3.W = min(剩余体力,b) - a;
    4.判断W>0?
    (1)如果大于零, 比较上个状态(也需要判断上个状态是否能挑战x个)和这个挑战x个的体力剩余
    (2) 不大于零 , 无法挑战,记录上个挑战了x个的挑战(也需要判断上个状态是否能挑战x个)
    5.对最后一个挑战的dp值进行倒叙遍历,找到第一个体力值>0,及当前下标是最大挑战次数


     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 #define rep(i,j,k) for(int i = (j); i <= (k); i++)
     5 #define per(i,j,k) for(int i = (j); i >= (k); i--)
     6 
     7 typedef long long LL;
     8 const int N = 1e3 + 10;
     9 LL dp[N][N];
    10 LL a[N], b[N], c[N];
    11 
    12 void init(int n ){
    13     rep(i, 0, n)rep(j, 0, n) dp[i][j] = 0;
    14 }
    15 
    16 int main(){
    17 
    18     ios::sync_with_stdio(false);
    19     cin.tie(0);
    20 
    21     int T;
    22     cin >> T;
    23 
    24     rep(x, 1, T){
    25 
    26         int n, C;
    27         cin >> n >> C;
    28 
    29         init(n);
    30 
    31         rep(i, 1, n) cin >> a[i] >> b[i] >> c[i];
    32 
    33         dp[0][0] = C;//1.初始化dp[0][0] = C;
    34 
    35         rep(i, 1, n){
    36             dp[i][0] = dp[i - 1][0] + c[i];
    37 
    38             rep(j, 1, i){
    39                 if (dp[i - 1][j - 1] == 0) continue;//2.判断你要挑战第x个时,x-1个挑战是否完成,
    40                                                    // 如果x-1个挑战都无法完成,那么x个挑战无法开始
    41                 LL W = min(dp[i - 1][j - 1], b[i]) - a[i];//3.W = min(剩余体力,b) - a;
    42                 //(dp[i - 1][j] != 0) * c[i],,如果dp值是0,则判断上个状态是不能挑战x个
    43                 // 那么0 + 0 * c
    44                 if (W > 0) dp[i][j] = max(dp[i - 1][j] + (dp[i - 1][j] != 0)*c[i], W + c[i]);
    45                 else dp[i][j] = dp[i - 1][j] + (dp[i - 1][j] != 0)*c[i];
    46             }
    47         }
    48         //5.对最后一个挑战的dp值进行倒叙遍历,找到第一个体力值>0,及当前下标是最大挑战次数
    49         per(o, n, 0){
    50             if (dp[n][o]){
    51                 cout << o << endl;
    52                 break;
    53             }
    54         }
    55     }
    56 
    57 
    58     return 0;
    59 }
     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 typedef long long ll;
     7 const int N = 1010;
     8 ll dp[N];
     9 
    10 /*
    11     时隔好久了,重新回顾了一遍“背包九讲”,发现自己的理解进一步了,这里再发部一维的吧
    12 */
    13 int main(){
    14 
    15     int T;
    16     scanf("%d",&T);
    17 
    18     while(T--){
    19             
    20         int n;
    21         ll t;
    22         scanf("%d%lld",&n,&t);
    23 
    24         dp[0] = t;
    25         for(int i = 1; i <= n; i++)
    26             dp[i] = 0;
    27 
    28         ll a,b,c;
    29 
    30         for(int i = 1; i <= n; i++){
    31             scanf("%lld%lld%lld",&a,&b,&c);
    32 
    33             for(int j = i; j >= 1; j--){
    34 
    35                 if(dp[j - 1] <= 0) continue;
    36 
    37                 ll tmp = min(dp[j - 1],b) - a;
    38                 if(tmp > 0)
    39                     dp[j] = max(dp[j]+(dp[j]>0)*c, tmp+c);
    40                 else 
    41                     dp[j] = dp[j]+(dp[j]>0)*c;
    42             }
    43             
    44             dp[0] += c;
    45         }
    46 
    47         for(int i = n; i >= 0; i--)
    48             if(dp[i] > 0){
    49                 printf("%d
    ",i);
    50                 break;
    51             }
    52 
    53     }
    54 
    55 
    56     return 0;
    57 }
  • 相关阅读:
    [模板] 循环数组的最大子段和
    [最短路][几何][牛客] [国庆集训派对1]-L-New Game
    [洛谷] P1866 编号
    1115 Counting Nodes in a BST (30 分)
    1106 Lowest Price in Supply Chain (25 分)
    1094 The Largest Generation (25 分)
    1090 Highest Price in Supply Chain (25 分)
    树的遍历
    1086 Tree Traversals Again (25 分)
    1079 Total Sales of Supply Chain (25 分 树
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/11163754.html
Copyright © 2011-2022 走看看