• 任务


    看了很久并没有懂,以下是标程的分析。

    好难啊啊啊啊啊

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <algorithm>
     6 #include <cstdlib>
     7 #include <stack>
     8 using namespace std;
     9 
    10 const int maxn = 3005;
    11 int a[maxn],b[maxn],dp[2][maxn*2];
    12 #define inf 0x3f3f3f3f
    13 int main() {
    14     int t;
    15     scanf("%d",&t);
    16     while(t--) {
    17         int n;
    18         scanf("%d",&n);
    19         for(int i = 1 ; i <= n ; i ++) scanf("%d %d",&a[i],&b[i]);
    20         int off = 3000;
    21         memset(dp,inf,sizeof dp);
    22         dp[0][3000] = 0;
    23         int k = 0;
    24         for(int i = 1; i <= n ; i ++) {
    25             for(int j = 0 ; j < 6001 ; j ++) {
    26                 if(dp[k][j] != inf) {
    27                     if(j > off) {
    28                         dp[1-k][off+a[i]] = min(dp[k][j]+a[i],dp[1-k][off+a[i]]);
    29                         dp[1-k][j-b[i]] = min( dp[1-k][j-b[i]], dp[k][j] + max(0,off-j+b[i]) );
    30                     }
    31                     else {
    32                         dp[1-k][j +a[i] ] = min(dp[1-k][j+a[i]] ,dp[k][j] + max(0,j+a[i]-off));
    33                         dp[1-k][off-b[i]] = min(dp[1-k][off-b[i]] ,dp[k][j]+b[i]);
    34 
    35                     }
    36                 }
    37             }
    38             memset(dp[k],inf,sizeof dp[k]);
    39             k = 1 - k;
    40         }
    41         int ans = inf ;
    42         for(int i = 0 ; i <= 6000; i++) {
    43             if(dp[k][i] != inf) {
    44                 ans = min(ans,dp[k][i] );
    45             }
    46         }
    47         printf("%d
    ",ans);
    48     }
    49     return 0;
    50 }

    大佬的:

     1 //
     2 //  Created by TaoSama on 2016-05-17
     3 //  Copyright (c) 2016 TaoSama. All rights reserved.
     4 //
     5 #pragma comment(linker, "/STACK:102400000,102400000")
     6 #include <algorithm>
     7 #include <cctype>
     8 #include <cmath>
     9 #include <cstdio>
    10 #include <cstdlib>
    11 #include <cstring>
    12 #include <ctime>
    13 #include <iomanip>
    14 #include <iostream>
    15 #include <map>
    16 #include <queue>
    17 #include <string>
    18 #include <set>
    19 #include <vector>
    20 
    21 using namespace std;
    22 #define pr(x) cout << #x << " = " << x << "  "
    23 #define prln(x) cout << #x << " = " << x << endl
    24 const int N = 2e3 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;
    25 const int OFF = 3000;
    26 
    27 int n, a[N], b[N];
    28 int f[2][OFF * 2 + 5]; //前i个任务 且A比B多用时j 的最小时间花费
    29 
    30 void getMin(int& x, int y) {
    31     if(x > y) x = y;
    32 }
    33 
    34 int main() {
    35 #ifdef LOCAL
    36     freopen("C:\Users\TaoSama\Desktop\in.txt", "r", stdin);
    37 //  freopen("C:\Users\TaoSama\Desktop\out.txt","w",stdout);
    38 #endif
    39     ios_base::sync_with_stdio(0);
    40     clock_t _ = clock();
    41 
    42     int t; scanf("%d", &t);
    43     while(t--) {
    44         scanf("%d", &n);
    45         for(int i = 1; i <= n; ++i) scanf("%d%d", a + i, b + i);
    46         int z = 0;
    47         memset(f[z], 0x3f, sizeof f[z]);
    48         f[z][OFF] = 0;
    49         for(int i = 1; i <= n; ++i) {
    50             memset(f[!z], 0x3f, sizeof f[!z]);
    51             for(int j = -OFF; j <= OFF; ++j) {
    52                 if(j > 0) {
    53                     getMin(f[!z][a[i] + OFF], f[z][j + OFF] + a[i]); //给A B只能等
    54                     getMin(f[!z][j + OFF - b[i]], f[z][j + OFF] + max(0, b[i] - j));
    55                 } else {
    56                     getMin(f[!z][-b[i] + OFF], f[z][j + OFF] + b[i]); //给B A只能等
    57                     getMin(f[!z][j + OFF + a[i]], f[z][j + OFF] + max(0, a[i] + j));
    58                 }
    59             }
    60             z = !z;
    61         }
    62         int ans = *min_element(f[z], f[z] + 2 * OFF + 1);
    63         printf("%d
    ", ans);
    64     }
    65 
    66 #ifdef LOCAL
    67     printf("
    Time cost: %.2fs
    ", 1.0 * (clock() - _) / CLOCKS_PER_SEC);
    68 #endif
    69     return 0;
    70 }
  • 相关阅读:
    Ubuntu下安装KVM
    Ubuntu下配置libvirt环境
    漏洞复现-Flask-SSTI服务端模板注入
    CTF-杂项笔记
    Tomcat后台爆破指南
    漏洞复现-CVE-2018-15473-ssh用户枚举漏洞
    漏洞复现-CVE-2018-8715-Appweb
    漏洞复现-CVE-2016-4437-Shiro反序列化
    漏洞复现-fastjson1.2.24-RCE
    漏洞复现-CVE-2017-4971-Spring Web Flow 远程代码执行
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/6973797.html
Copyright © 2020-2023  润新知