



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f4bf1142976e4bbf.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-f661b49995ba0bd8.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-0b38d22346321c92.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-f1c62c9e70259b9f.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-f50cacf0a86b9929.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-e61d4f4ca17852c2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-39c10993d5603fac.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-73236c840c0c7d90.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0de76f07cc035b10.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-fd1500c8744e40d6.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-ed9ca172356fd545.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-1d2c7f7b52a6068b.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-54ba76e934a49d7c.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-456bd5deb85c7ecd.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-11ee8a031c040c1a.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-2d56bdb0166c0238.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","activity_diff_file_tree","activity_repos_file_tree","activity_repos_overview_header","activity_repos_overview_sidebar","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_header_reorder","copilot_chat_max_upsell","copilot_chat_models_browser_cache","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_embedded_header_button","copilot_immersive_file_preview_keep_mounted","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_early_stop","copilot_mission_control_environment_list_icons","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_client_side_clone","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_session_filters","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset","copilot_workbench_sunset_redirect","copilot_workbench_ubb","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","glc_code_quality_repo_settings_workflow_config","hide_github_models_ui","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_optimistic_updates","issue_relative_time_micro","issues_dashboard_sso_structured_errors","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_optimistic_linked_branch_create","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_client_env_github_domain","memex_default_issue_create_repository","memex_lazy_hydrate_agent_tasks","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_checks_refetch_dedupe","merge_status_header_feedback","oauth_authorize_clickjacking_protection","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_commit_checks_dialog","pull_request_copilot_attribution_header","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_feedback_dialog","pull_request_virtualization_image_estimate","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_persistence","repo_pulls_dashboard_sidebar_links","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_banner_learn_copilot_sdk","site_global_nav_spark_models_removed","spark_prompt_secret_scanning","spark_server_connection_status","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","ui_service_compute_proxy_control","ui_service_referrer_metrics","ui_service_staleness_detection","update_issue_suggestions","user_code_paste_ux","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workbench_store_readonly","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-e3d808ee18eb9784.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-d0e712808f201ef1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-74e9766bd696d26a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-ecf766ea8a2c7fd6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-8e3d9c5d57d50312.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-cd1b421ad0ad7ed5.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-61cbdbc14ca92159.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.b6099d51b9e67b57.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-86a8f5de995615f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e88088f989b27670.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-7cdf4e0db98b997c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-6b3c07383371bf58.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-36f036c13c2e3a4c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kw-866fd9513ae95106.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r1-b075aab3204f32f9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-7c5d1669717041f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-5126390ff433704d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j05-dce4d588268f0f7e.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-1adb1d8c74044da9.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-1a7659d5cb4f8269.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-f3f5d71440009c48.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-76b18916d0c8ec4d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-5109c77d7ac61078.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-fbb00aaa3ab9abdf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/04n-51c49ba758739f13.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-024971cb63acad59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-364e19c63d726e9a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6ny-c969fbae697a356f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/yhq-3a209035a30b1a09.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z1v-da5b33b877bfa358.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wo-09f85d22a6c8931b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9y-81cfe57dc9040f3e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-41a4cf04cbd99503.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0p-81491ed0d9d666e2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-acc18f300bdd5b9f.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.5858534b1c27f133.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-f832f583b1c927a9.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-12ebdc24dcff1ecc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-9a860680a5f230b9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-363f0ebf4f62f310.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-bf6f21d7e7a43c35.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fe-7576d9b281e2106a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wsr-5fd3071e5a9061ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0n-ecadb2ffe6b01ba2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xv-51cb34754bda73a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4u-6317ce1c31aed1db.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8s-d90ce3a169b741ed.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-de176c4ee471f2b3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eag-d9eea130fa716df9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y2-87df441f1bc5a264.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kcz-607e36c8a3751cf0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/x4-65dba777efd828f3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gzu-1a09248f686325f6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bi0-e2f78de823e39ca9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/on-95be29ba1ef725d9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b1-1dbc371cef78c3c1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0l5-c4edb8ab48c5846d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c2z-c92998400310b94b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/f9-038758dcbfe08dab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0k-b7df0a74912a42bf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sp-915c6643cc0d7d44.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/og-93ae8b358505d372.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b9-69d9b60a1b1fcd59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ec-8ea7978d3fcd114e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/du-a401e69a37d95bcc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ql0-1c18210f6b9e2263.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-0a2e46387735f1f4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dsj-cb1e4ddbce4f007b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-9f5235d335ab624b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ko6-9e80f7ac359e3c43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/uw-8c275f7ac25b7cf6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bsb-4f4ac8c20da73fac.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/w5-13e3a7548bb20af9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fm-c00a7677663ba326.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z-45022d3da7b8817e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h0-010921512138e12f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5p-ae5db0820116fb43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8vq-b2af216e992e11ef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g5-88f2a4514daa19ca.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xc-f5d51b571cd317cb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/arw-51e8918a1b75a80f.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-c72427a42c7b1dd6.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.de7a55ca73db5693.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/z.812a998e1961b84d.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/xc.13e027137438fd9f.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.5099f1f900111d1b.module.css" />

  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hu-1fc0b2a167afc025.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fb-ef2c91536abed646.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-6f8f2a4b24a472b0.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.3ae223c973c2cef3.module.css" />


  <title>leetcode-master/problems/背包理论基础01背包-1.md at master · feinan/leetcode-master · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:97a8fe24-ce6f-24f4-788a-b7b72f0fbbab">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="A98C:B110C:1233B478:110942B7:6AACB173" data-pjax-transient="true"/><meta name="html-safe-nonce" content="c310c0f76a2f47e35f7eebbc1f66426ae86682a0788965868662bfa7634153fc" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBOThDOkIxMTBDOjEyMzNCNDc4OjExMDk0MkI3OjZBQUNCMTczIiwidmlzaXRvcl9pZCI6IjQ5MTA0MTMxODQ3NzEwNzY0NjciLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="f4b9ae4cc7849113e75b864e97290611e08371c2d2548e838223cf437603f664" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:793905675" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - leetcode-master/problems/背包理论基础01背包-1.md at master · feinan/leetcode-master">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/4bceb88f33f681892d82d046920e4eee0262c04b0d5eadd239c8051152eac176/feinan/leetcode-master" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="leetcode-master/problems/背包理论基础01背包-1.md at master · feinan/leetcode-master" /><meta name="twitter:description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" />
  <meta property="og:image" content="https://opengraph.githubassets.com/4bceb88f33f681892d82d046920e4eee0262c04b0d5eadd239c8051152eac176/feinan/leetcode-master" /><meta property="og:image:alt" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="leetcode-master/problems/背包理论基础01背包-1.md at master · feinan/leetcode-master" /><meta property="og:url" content="https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md" /><meta property="og:description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="1b7a4ff13706175db9ddcddd8b7c27b8946d9e20d9cdccd9cb54b37d67bc242f" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="0c5c6e5334a905d8f9521e09eadcffba484d422e0d262e07ff922e6bc18b2ac6" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="ec4c7b86d7b57240253150b827ea48b04e08d8760dc6553d2a04f62000f3fe0c" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="4644d0c4c253864cb5744c15cc28e64149f3c1e0e485c44cbd24a4b86ca508ad" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/feinan/leetcode-master git https://github.com/feinan/leetcode-master.git">

  <meta name="octolytics-dimension-user_id" content="1912535" /><meta name="octolytics-dimension-user_login" content="feinan" /><meta name="octolytics-dimension-repository_id" content="793905675" /><meta name="octolytics-dimension-repository_nwo" content="feinan/leetcode-master" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="true" /><meta name="octolytics-dimension-repository_parent_id" content="228016443" /><meta name="octolytics-dimension-repository_parent_nwo" content="youngyangyang04/leetcode-master" /><meta name="octolytics-dimension-repository_network_root_id" content="228016443" /><meta name="octolytics-dimension-repository_network_root_nwo" content="youngyangyang04/leetcode-master" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="4a04228f6072ee1ec5cd2227074bd1c1a8308ce2" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/l7j-2ddd8b435dadae28.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-98a85b4ad3bf8229.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.9f1b311c6a3e620b.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          
          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2l-8671acba87bc0dcb.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/i26-f2ae65b837c90ae7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-23f28c0f388769c9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lht-26506ea833dda5be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p1-76a75a6081059b19.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3d-82c347d20a13fb90.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tua-c4ca62c5e0e0318e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4s-c22d880230690e1f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-5251d405164cfa54.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.6a01c236ff527e7e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/4s.e3d02f110161be52.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F%25E8%2583%258C%25E5%258C%2585%25E7%2590%2586%25E8%25AE%25BA%25E5%259F%25BA%25E7%25A1%258001%25E8%2583%258C%25E5%258C%2585-1.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=feinan%2Fleetcode-master","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md\",\"user_id\":null}}","auth_hydro_click_hmac":"3e110da055af786b3d1f776a7aedec8348db5e3be1e632ff8d6094b93eccb054","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F%25E8%2583%258C%25E5%258C%2585%25E7%2590%2586%25E8%25AE%25BA%25E5%259F%25BA%25E7%25A1%258001%25E8%2583%258C%25E5%258C%2585-1.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="3e110da055af786b3d1f776a7aedec8348db5e3be1e632ff8d6094b93eccb054"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F%25E8%2583%258C%25E5%258C%2585%25E7%2590%2586%25E8%25AE%25BA%25E5%259F%25BA%25E7%25A1%258001%25E8%2583%258C%25E5%258C%2585-1.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="3e110da055af786b3d1f776a7aedec8348db5e3be1e632ff8d6094b93eccb054"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=feinan%2Fleetcode-master" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="3e110da055af786b3d1f776a7aedec8348db5e3be1e632ff8d6094b93eccb054"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-bdd4aac0-e384-4e12-9b68-e5df76d5dc39" aria-labelledby="tooltip-543400d7-c557-4879-9f5c-4e1ba4759a67" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-543400d7-c557-4879-9f5c-4e1ba4759a67" for="icon-button-bdd4aac0-e384-4e12-9b68-e5df76d5dc39" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>





  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      








  

    <div id="repository-container-header"  class="tmp-pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace>

        <div class="d-flex flex-nowrap flex-justify-end tmp-mb-3  tmp-px-3 tmp-px-lg-5" style="gap: 1rem;">

          <div class="flex-auto min-width-0 width-fit">
              
  <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked color-fg-muted mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>
    
    <span class="author flex-self-stretch" itemprop="author">
      <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/feinan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/feinan">
        feinan
</a>    </span>
    <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
    <strong itemprop="name" class="mr-2 flex-self-stretch">
      <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/feinan/leetcode-master">leetcode-master</a>
    </strong>

    <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
  </div>
    <span class="text-small lh-condensed-ultra no-wrap mt-1" data-repository-hovercards-enabled>
      forked from <a data-hovercard-type="repository" data-hovercard-url="/youngyangyang04/leetcode-master/hovercard" class="Link--inTextBlock" href="/youngyangyang04/leetcode-master">youngyangyang04/leetcode-master</a>
    </span>


          </div>

          <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;">
              <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
    
      

  <li>
            <a href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="156284ba98edeb62370f104c88c6748081faf526a034decee322bb87c22c010d" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2 tmp-mr-2">
    <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path>
</svg>Notifications
</a>    <tool-tip id="tooltip-b4949ed5-a599-4640-9aa0-bda0146e04c5" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip>

  </li>

  <li>
          <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:793905675,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="082f42967c65764779c1347ce8d3b0d00d7c465d083f01e5e8779717aacc0e68" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>Fork
    <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="4" data-view-component="true" class="Counter">4</span>
</a>
  </li>

  <li>
        <div data-view-component="true" class="BtnGroup d-flex">
        <a href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:793905675,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="a2d78e0358ba71dac377ebb10a0874bbf6354d6c23248b17da941fca9586d21f" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2 tmp-mr-2">
    <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>
</svg><span data-view-component="true" class="d-inline">
          Star
</span>          <span id="repo-stars-counter-star" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
</a></div>
  </li>

</ul>

          </div>
        </div>

          <div id="responsive-meta-container" data-turbo-replace>
</div>


            <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 tmp-px-3 px-md-4 tmp-px-md-4 px-lg-5 tmp-px-lg-5">

  <ul data-view-component="true" class="UnderlineNav-body list-style-none">
      <li data-view-component="true" class="d-inline-flex">
  <a id="code-tab" href="/feinan/leetcode-master" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /feinan/leetcode-master" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-command-id="repositories:go-to-code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        <span data-content="Code">Code</span>
          <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="pull-requests-tab" href="/feinan/leetcode-master/pulls" data-tab-item="i1pull-requests-tab" data-selected-links="repo_pulls checks /feinan/leetcode-master/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-command-id="repositories:go-to-pull-requests" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        <span data-content="Pull requests">Pull requests</span>
          <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="actions-tab" href="/feinan/leetcode-master/actions" data-tab-item="i2actions-tab" data-selected-links="repo_actions /feinan/leetcode-master/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-command-id="repositories:go-to-actions" data-react-nav="actions-workflows" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        <span data-content="Actions">Actions</span>
          <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="projects-tab" href="/feinan/leetcode-master/projects" data-tab-item="i3projects-tab" data-selected-links="repo_projects new_repo_project repo_project /feinan/leetcode-master/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-command-id="repositories:go-to-projects" data-react-nav="repo" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        <span data-content="Projects">Projects</span>
          <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="security-and-quality-tab" href="/feinan/leetcode-master/security" data-tab-item="i4security-and-quality-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /feinan/leetcode-master/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-command-id="repositories:go-to-security" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security and quality&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span data-content="Security and quality">Security and quality</span>
          <span id="security-and-quality-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="insights-tab" href="/feinan/leetcode-master/pulse" data-tab-item="i5insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /feinan/leetcode-master/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-command-id="repositories:go-to-insights" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        <span data-content="Insights">Insights</span>
          <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
</ul>
    <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 tmp-pr-3 pr-md-4 tmp-pr-md-4 pr-lg-5 tmp-pr-lg-5 right-0">      <action-menu data-select-variant="none" data-view-component="true">
  <focus-group direction="vertical" mnemonics retain>
    <button id="action-menu-b82a54fc-1c98-48e1-89e8-e05f7e658ade-button" popovertarget="action-menu-b82a54fc-1c98-48e1-89e8-e05f7e658ade-overlay" aria-controls="action-menu-b82a54fc-1c98-48e1-89e8-e05f7e658ade-list" aria-haspopup="true" aria-labelledby="tooltip-06a4292a-9bd9-4faf-97b9-ee786963d911" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual">
    <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path>
</svg>
</button><tool-tip id="tooltip-06a4292a-9bd9-4faf-97b9-ee786963d911" for="action-menu-b82a54fc-1c98-48e1-89e8-e05f7e658ade-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip>


<anchored-position data-target="action-menu.overlay" id="action-menu-b82a54fc-1c98-48e1-89e8-e05f7e658ade-overlay" anchor="action-menu-b82a54fc-1c98-48e1-89e8-e05f7e658ade-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true">
  <div data-view-component="true" class="Overlay Overlay--size-auto">
    
      <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone">          <action-list>
  <div data-view-component="true">
    <ul aria-labelledby="action-menu-b82a54fc-1c98-48e1-89e8-e05f7e658ade-button" id="action-menu-b82a54fc-1c98-48e1-89e8-e05f7e658ade-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap">
        <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-87eafcf0-5776-40a3-ab1c-8585fcb86b38" href="/feinan/leetcode-master" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Code
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i1pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-d37ad51c-5d72-44fd-8f38-f8b4706365c0" href="/feinan/leetcode-master/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Pull requests
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i2actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-090adaf7-ed5d-4b96-8bb0-eb900ee1765c" href="/feinan/leetcode-master/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Actions
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i3projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-d771d789-9f8b-4b58-8bce-14414bcf7c95" href="/feinan/leetcode-master/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Projects
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i4security-and-quality-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-ac5dd144-710e-43ed-8a22-572076f4d3ae" href="/feinan/leetcode-master/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Security and quality
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i5insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-1ff24679-32d1-4886-ad06-494918fdfd02" href="/feinan/leetcode-master/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Insights
</span>      
</a>
  
</li>
</ul>    
</div></action-list>


</div>
      
</div></anchored-position>  </focus-group>
</action-menu></div>
</nav>

    </div>
  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"动态规划：01背包理论基础","anchor":"动态规划01背包理论基础","htmlText":"动态规划：01背包理论基础"},{"level":2,"text":"算法公开课","anchor":"算法公开课","htmlText":"算法公开课"},{"level":2,"text":"思路","anchor":"思路","htmlText":"思路"},{"level":3,"text":"01 背包","anchor":"01-背包","htmlText":"01 背包"},{"level":3,"text":"二维dp数组01背包","anchor":"二维dp数组01背包","htmlText":"二维dp数组01背包"},{"level":2,"text":"总结","anchor":"总结","htmlText":"总结"},{"level":2,"text":"其他语言版本","anchor":"其他语言版本","htmlText":"其他语言版本"},{"level":3,"text":"Java","anchor":"java","htmlText":"Java"},{"level":3,"text":"Python","anchor":"python","htmlText":"Python"},{"level":3,"text":"Go","anchor":"go","htmlText":"Go"},{"level":3,"text":"Javascript","anchor":"javascript","htmlText":"Javascript"},{"level":3,"text":"C","anchor":"c","htmlText":"C"},{"level":3,"text":"TypeScript","anchor":"typescript","htmlText":"TypeScript"},{"level":3,"text":"Scala","anchor":"scala","htmlText":"Scala"},{"level":3,"text":"Rust","anchor":"rust","htmlText":"Rust"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cp align=\"center\" dir=\"auto\"\u003e\n\u003ca href=\"https://www.programmercarl.com/xunlian/xunlianying.html\" rel=\"nofollow\"\u003e\n  \u003cimg src=\"/feinan/leetcode-master/raw/master/pics/训练营.png\" width=\"1000\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\u003cp align=\"center\" dir=\"auto\"\u003e\u003cstrong\u003e\u003ca href=\"/feinan/leetcode-master/blob/master/problems/qita/join.md\"\u003e参与本项目\u003c/a\u003e，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e动态规划：01背包理论基础\u003c/h1\u003e\u003ca id=\"user-content-动态规划01背包理论基础\" class=\"anchor\" aria-label=\"Permalink: 动态规划：01背包理论基础\" href=\"#动态规划01背包理论基础\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e本题力扣上没有原题，大家可以去\u003ca href=\"https://kamacoder.com/problempage.php?pid=1046\" rel=\"nofollow\"\u003e卡码网第46题\u003c/a\u003e去练习，题意是一样的。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e算法公开课\u003c/h2\u003e\u003ca id=\"user-content-算法公开课\" class=\"anchor\" aria-label=\"Permalink: 算法公开课\" href=\"#算法公开课\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e\u003ca href=\"https://programmercarl.com/other/gongkaike.html\" rel=\"nofollow\"\u003e《代码随想录》算法视频公开课\u003c/a\u003e：\u003ca href=\"https://www.bilibili.com/video/BV1cg411g7Y6/\" rel=\"nofollow\"\u003e带你学透0-1背包问题！\u003c/a\u003e，相信结合视频再看本篇题解，更有助于大家对本题的理解\u003c/strong\u003e。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e思路\u003c/h2\u003e\u003ca id=\"user-content-思路\" class=\"anchor\" aria-label=\"Permalink: 思路\" href=\"#思路\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这周我们正式开始讲解背包问题！\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e背包问题的经典资料当然是：背包九讲。在公众号「代码随想录」后台回复：背包九讲，就可以获得背包九讲的pdf。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e但说实话，背包九讲对于小白来说确实不太友好，看起来还是有点费劲的，而且都是伪代码理解起来也吃力。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e对于面试的话，其实掌握01背包，和完全背包，就够用了，最多可以再来一个多重背包。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如果这几种背包，分不清，我这里画了一个图，如下：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/dc16ba7b96175fe08f71acf941ef49794fdbcb1c7cd8229b536e679551881df3/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131373137313330373430372e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/dc16ba7b96175fe08f71acf941ef49794fdbcb1c7cd8229b536e679551881df3/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131373137313330373430372e706e67\" alt=\"416.分割等和子集1\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/20210117171307407.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e至于背包九讲其他背包，面试几乎不会问，都是竞赛级别的了，leetcode上连多重背包的题目都没有，所以题库也告诉我们，01背包和完全背包就够用了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e而完全背包又是也是01背包稍作变化而来，即：完全背包的物品数量是无限的。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e所以背包问题的理论基础重中之重是01背包，一定要理解透！\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eleetcode上没有纯01背包的问题，都是01背包应用方面的题目，也就是需要转化为01背包问题。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e所以我先通过纯01背包问题，把01背包原理讲清楚，后续再讲解leetcode题目的时候，重点就是讲解如何转化为01背包问题了\u003c/strong\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e之前可能有些录友已经可以熟练写出背包了，但只要把这个文章仔细看完，相信你会意外收获！\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e01 背包\u003c/h3\u003e\u003ca id=\"user-content-01-背包\" class=\"anchor\" aria-label=\"Permalink: 01 背包\" href=\"#01-背包\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]，得到的价值是value[i] 。\u003cstrong\u003e每件物品只能用一次\u003c/strong\u003e，求解将哪些物品装入背包里物品价值总和最大。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/53778fdcdd53aac9a447aada4158f75f00bffe729f3686bc2a5d945270ba8248/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131373137353432383338372e6a7067\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/53778fdcdd53aac9a447aada4158f75f00bffe729f3686bc2a5d945270ba8248/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131373137353432383338372e6a7067\" alt=\"动态规划-背包问题\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/20210117175428387.jpg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e这是标准的背包问题，以至于很多同学看了这个自然就会想到背包，甚至都不知道暴力的解法应该怎么解了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e这样其实是没有从底向上去思考，而是习惯性想到了背包，那么暴力的解法应该是怎么样的呢？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e每一件物品其实只有两个状态，取或者不取，所以可以使用回溯法搜索出所有的情况，那么时间复杂度就是$o(2^n)$，这里的n表示物品数量。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e所以暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化！\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e在下面的讲解中，我举一个例子：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e背包最大重量为4。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e物品为：\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003e重量\u003c/th\u003e\n\u003cth\u003e价值\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e物品0\u003c/td\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003e15\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e物品1\u003c/td\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003e20\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e物品2\u003c/td\u003e\n\u003ctd\u003e4\u003c/td\u003e\n\u003ctd\u003e30\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e问背包能背的物品最大价值是多少？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e以下讲解和图示中出现的数字都是以这个例子为例。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e二维dp数组01背包\u003c/h3\u003e\u003ca id=\"user-content-二维dp数组01背包\" class=\"anchor\" aria-label=\"Permalink: 二维dp数组01背包\" href=\"#二维dp数组01背包\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e依然动规五部曲分析一波。\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e确定dp数组以及下标的含义\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e对于背包问题，有一种写法， 是使用二维数组，即\u003cstrong\u003edp[i][j] 表示从下标为[0-i]的物品里任意取，放进容量为j的背包，价值总和最大是多少\u003c/strong\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e只看这个二维数组的定义，大家一定会有点懵，看下面这个图：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/ef9a73b404e3ddf8240cafea7858beb22b6da80296222974811ce0e508bc7ffc/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333030333336312e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/ef9a73b404e3ddf8240cafea7858beb22b6da80296222974811ce0e508bc7ffc/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333030333336312e706e67\" alt=\"动态规划-背包问题1\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103003361.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e要时刻记着这个dp数组的含义，下面的一些步骤都围绕这dp数组的含义进行的\u003c/strong\u003e，如果哪里看懵了，就来回顾一下i代表什么，j又代表什么。\u003c/p\u003e\n\u003col start=\"2\" dir=\"auto\"\u003e\n\u003cli\u003e确定递推公式\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e再回顾一下dp[i][j]的含义：从下标为[0-i]的物品里任意取，放进容量为j的背包，价值总和最大是多少。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e那么可以有两个方向推出来dp[i][j]，\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003e不放物品i\u003c/strong\u003e：由dp[i - 1][j]推出，即背包容量为j，里面不放物品i的最大价值，此时dp[i][j]就是dp[i - 1][j]。(其实就是当物品i的重量大于背包j的重量时，物品i无法放进背包中，所以背包内的价值依然和前面相同。)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e放物品i\u003c/strong\u003e：由dp[i - 1][j - weight[i]]推出，dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值，那么dp[i - 1][j - weight[i]] + value[i] （物品i的价值），就是背包放物品i得到的最大价值\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e所以递归公式： dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\u003c/p\u003e\n\u003col start=\"3\" dir=\"auto\"\u003e\n\u003cli\u003edp数组如何初始化\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e关于初始化，一定要和dp数组的定义吻合，否则到递推公式的时候就会越来越乱\u003c/strong\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e首先从dp[i][j]的定义出发，如果背包容量j为0的话，即dp[i][0]，无论是选取哪些物品，背包价值总和一定为0。如图：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/6f98904679377bddd55312ee69ad2a26139907c4c32e5a2c651c6ab1cfc2d5d0/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f323032313031313031303330343139322e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/6f98904679377bddd55312ee69ad2a26139907c4c32e5a2c651c6ab1cfc2d5d0/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f323032313031313031303330343139322e706e67\" alt=\"动态规划-背包问题2\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/2021011010304192.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e在看其他情况。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e状态转移方程 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 可以看出i 是由 i-1 推导出来，那么i为0的时候就一定要初始化。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003edp[0][j]，即：i为0，存放编号0的物品的时候，各个容量的背包所能存放的最大价值。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e那么很明显当 j \u0026lt; weight[0]的时候，dp[0][j] 应该是 0，因为背包容量比编号0的物品重量还小。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e当j \u0026gt;= weight[0]时，dp[0][j] 应该是value[0]，因为背包容量放足够放编号0物品。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e代码初始化如下：\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"for (int j = 0 ; j \u0026lt; weight[0]; j++) {  // 当然这一步，如果把dp数组预先初始化为0了，这一步就可以省略，但很多同学应该没有想清楚这一点。\n    dp[0][j] = 0;\n}\n// 正序遍历\nfor (int j = weight[0]; j \u0026lt;= bagweight; j++) {\n    dp[0][j] = value[0];\n}\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003efor (int j = 0 ; j \u0026lt; weight[0]; j++) {  // 当然这一步，如果把dp数组预先初始化为0了，这一步就可以省略，但很多同学应该没有想清楚这一点。\n    dp[0][j] = 0;\n}\n// 正序遍历\nfor (int j = weight[0]; j \u0026lt;= bagweight; j++) {\n    dp[0][j] = value[0];\n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e此时dp数组初始化情况如图所示：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/addab96ec23fdff91c01f29a09eda3449300870c7dd6a78deabb4d7dcf93b7a6/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333130393134302e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/addab96ec23fdff91c01f29a09eda3449300870c7dd6a78deabb4d7dcf93b7a6/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333130393134302e706e67\" alt=\"动态规划-背包问题7\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103109140.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003edp[0][j] 和 dp[i][0] 都已经初始化了，那么其他下标应该初始化多少呢？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e其实从递归公式： dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 可以看出dp[i][j]  是由左上方数值推导出来了，那么 其他下标初始为什么数值都可以，因为都会被覆盖。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e初始-1，初始-2，初始100，都可以！\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e但只不过一开始就统一把dp数组统一初始为0，更方便一些。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如图：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/0b1f498d5d9967b075073d1cbe8623bb9f7bb84f309e932a7da15ffd032de679/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f2545352538412541382545362538302538312545382541372538342545352538382539322d25453825383325384325453525384325383525453925393725414525453925413225393831302e6a7067\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/0b1f498d5d9967b075073d1cbe8623bb9f7bb84f309e932a7da15ffd032de679/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f2545352538412541382545362538302538312545382541372538342545352538382539322d25453825383325384325453525384325383525453925393725414525453925413225393831302e6a7067\" alt=\"动态规划-背包问题10\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92-%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%9810.jpg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e最后初始化代码如下：\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"// 初始化 dp\nvector\u0026lt;vector\u0026lt;int\u0026gt;\u0026gt; dp(weight.size(), vector\u0026lt;int\u0026gt;(bagweight + 1, 0));\nfor (int j = weight[0]; j \u0026lt;= bagweight; j++) {\n    dp[0][j] = value[0];\n}\n\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e// 初始化 dp\nvector\u0026lt;vector\u0026lt;int\u0026gt;\u0026gt; dp(weight.size(), vector\u0026lt;int\u0026gt;(bagweight + 1, 0));\nfor (int j = weight[0]; j \u0026lt;= bagweight; j++) {\n    dp[0][j] = value[0];\n}\n\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e费了这么大的功夫，才把如何初始化讲清楚，相信不少同学平时初始化dp数组是凭感觉来的，但有时候感觉是不靠谱的\u003c/strong\u003e。\u003c/p\u003e\n\u003col start=\"4\" dir=\"auto\"\u003e\n\u003cli\u003e确定遍历顺序\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e在如下图中，可以看出，有两个遍历的维度：物品与背包重量\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/358d6ba507f44dcf026b948eb0b895cca81207196b46352b957a5354db5c355a/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f323032313031313031303331343035352e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/358d6ba507f44dcf026b948eb0b895cca81207196b46352b957a5354db5c355a/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f323032313031313031303331343035352e706e67\" alt=\"动态规划-背包问题3\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/2021011010314055.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e那么问题来了，\u003cstrong\u003e先遍历 物品还是先遍历背包重量呢？\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e其实都可以！！ 但是先遍历物品更好理解\u003c/strong\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e那么我先给出先遍历物品，然后遍历背包重量的代码。\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"// weight数组的大小 就是物品个数\nfor(int i = 1; i \u0026lt; weight.size(); i++) { // 遍历物品\n    for(int j = 0; j \u0026lt;= bagweight; j++) { // 遍历背包容量\n        if (j \u0026lt; weight[i]) dp[i][j] = dp[i - 1][j];\n        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\n\n    }\n}\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e// weight数组的大小 就是物品个数\nfor(int i = 1; i \u0026lt; weight.size(); i++) { // 遍历物品\n    for(int j = 0; j \u0026lt;= bagweight; j++) { // 遍历背包容量\n        if (j \u0026lt; weight[i]) dp[i][j] = dp[i - 1][j];\n        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\n\n    }\n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e先遍历背包，再遍历物品，也是可以的！（注意我这里使用的二维dp数组）\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e例如这样：\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"// weight数组的大小 就是物品个数\nfor(int j = 0; j \u0026lt;= bagweight; j++) { // 遍历背包容量\n    for(int i = 1; i \u0026lt; weight.size(); i++) { // 遍历物品\n        if (j \u0026lt; weight[i]) dp[i][j] = dp[i - 1][j];\n        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\n    }\n}\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e// weight数组的大小 就是物品个数\nfor(int j = 0; j \u0026lt;= bagweight; j++) { // 遍历背包容量\n    for(int i = 1; i \u0026lt; weight.size(); i++) { // 遍历物品\n        if (j \u0026lt; weight[i]) dp[i][j] = dp[i - 1][j];\n        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\n    }\n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e为什么也是可以的呢？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e要理解递归的本质和递推的方向\u003c/strong\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003edp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 递归公式中可以看出dp[i][j]是靠dp[i-1][j]和dp[i - 1][j - weight[i]]推导出来的。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003edp[i-1][j]和dp[i - 1][j - weight[i]] 都在dp[i][j]的左上角方向（包括正上方向），那么先遍历物品，再遍历背包的过程如图所示：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/7a7c0596dcda9f01c87026d2c61cc1446fbcedeaf4c89e205bf6ba6545d47c84/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f3230323130313130313033323132342e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/7a7c0596dcda9f01c87026d2c61cc1446fbcedeaf4c89e205bf6ba6545d47c84/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f3230323130313130313033323132342e706e67\" alt=\"动态规划-背包问题5\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/202101101032124.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e再来看看先遍历背包，再遍历物品呢，如图：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/0401c24a5277ad6908e642f9569380dc8d3d8227f1eb05bf9b26fc8be10b16fb/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333234343730312e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/0401c24a5277ad6908e642f9569380dc8d3d8227f1eb05bf9b26fc8be10b16fb/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333234343730312e706e67\" alt=\"动态规划-背包问题6\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103244701.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e大家可以看出，虽然两个for循环遍历的次序不同，但是dp[i][j]所需要的数据就是左上角，根本不影响dp[i][j]公式的推导！\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e但先遍历物品再遍历背包这个顺序更好理解。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e其实背包问题里，两个for循环的先后循序是非常有讲究的，理解遍历顺序其实比理解推导公式难多了\u003c/strong\u003e。\u003c/p\u003e\n\u003col start=\"5\" dir=\"auto\"\u003e\n\u003cli\u003e举例推导dp数组\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e来看一下对应的dp数组的数值，如图：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/337b3b43b9f8fc6c578405e80f6f7cc0ad82d51e23ebc60e99d2f1e63c064d9e/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131383136333432353132392e6a7067\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/337b3b43b9f8fc6c578405e80f6f7cc0ad82d51e23ebc60e99d2f1e63c064d9e/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131383136333432353132392e6a7067\" alt=\"动态规划-背包问题4\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/20210118163425129.jpg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e最终结果就是dp[2][4]。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e建议大家此时自己在纸上推导一遍，看看dp数组里每一个数值是不是这样的。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e做动态规划的题目，最好的过程就是自己在纸上举一个例子把对应的dp数组的数值推导一下，然后在动手写代码！\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e很多同学做dp题目，遇到各种问题，然后凭感觉东改改西改改，怎么改都不对，或者稀里糊涂就改过了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e主要就是自己没有动手推导一下dp数组的演变过程，如果推导明白了，代码写出来就算有问题，只要把dp数组打印出来，对比一下和自己推导的有什么差异，很快就可以发现问题了。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"void test_2_wei_bag_problem1() {\n    vector\u0026lt;int\u0026gt; weight = {1, 3, 4};\n    vector\u0026lt;int\u0026gt; value = {15, 20, 30};\n    int bagweight = 4;\n\n    // 二维数组\n    vector\u0026lt;vector\u0026lt;int\u0026gt;\u0026gt; dp(weight.size(), vector\u0026lt;int\u0026gt;(bagweight + 1, 0));\n\n    // 初始化\n    for (int j = weight[0]; j \u0026lt;= bagweight; j++) {\n        dp[0][j] = value[0];\n    }\n\n    // weight数组的大小 就是物品个数\n    for(int i = 1; i \u0026lt; weight.size(); i++) { // 遍历物品\n        for(int j = 0; j \u0026lt;= bagweight; j++) { // 遍历背包容量\n            if (j \u0026lt; weight[i]) dp[i][j] = dp[i - 1][j];\n            else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\n\n        }\n    }\n\n    cout \u0026lt;\u0026lt; dp[weight.size() - 1][bagweight] \u0026lt;\u0026lt; endl;\n}\n\nint main() {\n    test_2_wei_bag_problem1();\n}\n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest_2_wei_bag_problem1\u003c/span\u003e() {\n    vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; weight = {\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e};\n    vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; value = {\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e};\n    \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e bagweight = \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e;\n\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 二维数组\u003c/span\u003e\n    vector\u0026lt;vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt;\u0026gt; \u003cspan class=\"pl-c1\"\u003edp\u003c/span\u003e(weight.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e(), vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt;(bagweight + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e));\n\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 初始化\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e j = weight[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]; j \u0026lt;= bagweight; j++) {\n        dp[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e][j] = value[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e];\n    }\n\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e weight数组的大小 就是物品个数\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e i = \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; i \u0026lt; weight.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e(); i++) { \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 遍历物品\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e j = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; j \u0026lt;= bagweight; j++) { \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 遍历背包容量\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (j \u0026lt; weight[i]) dp[i][j] = dp[i - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][j];\n            \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e dp[i][j] = \u003cspan class=\"pl-c1\"\u003emax\u003c/span\u003e(dp[i - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][j], dp[i - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][j - weight[i]] + value[i]);\n\n        }\n    }\n\n    cout \u0026lt;\u0026lt; dp[weight.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e() - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][bagweight] \u0026lt;\u0026lt; endl;\n}\n\n\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e() {\n    \u003cspan class=\"pl-c1\"\u003etest_2_wei_bag_problem1\u003c/span\u003e();\n}\n\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e本题力扣上没有原题，大家可以去\u003ca href=\"https://kamacoder.com/problempage.php?pid=1046\" rel=\"nofollow\"\u003e卡码网第46题\u003c/a\u003e去练习，题意是一样的，代码如下：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\n//二维dp数组实现\n#include \u0026lt;bits/stdc++.h\u0026gt;\nusing namespace std;\n\nint n, bagweight;// bagweight代表行李箱空间\nvoid solve() {\n    vector\u0026lt;int\u0026gt; weight(n, 0); // 存储每件物品所占空间\n    vector\u0026lt;int\u0026gt; value(n, 0);  // 存储每件物品价值\n    for(int i = 0; i \u0026lt; n; ++i) {\n        cin \u0026gt;\u0026gt; weight[i];\n    }\n    for(int j = 0; j \u0026lt; n; ++j) {\n        cin \u0026gt;\u0026gt; value[j];\n    }\n    // dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值\n    vector\u0026lt;vector\u0026lt;int\u0026gt;\u0026gt; dp(weight.size(), vector\u0026lt;int\u0026gt;(bagweight + 1, 0));\n\n    // 初始化, 因为需要用到dp[i - 1]的值\n    // j \u0026lt; weight[0]已在上方被初始化为0\n    // j \u0026gt;= weight[0]的值就初始化为value[0]\n    for (int j = weight[0]; j \u0026lt;= bagweight; j++) {\n        dp[0][j] = value[0];\n    }\n\n    for(int i = 1; i \u0026lt; weight.size(); i++) { // 遍历科研物品\n        for(int j = 0; j \u0026lt;= bagweight; j++) { // 遍历行李箱容量\n            // 如果装不下这个物品,那么就继承dp[i - 1][j]的值\n            if (j \u0026lt; weight[i]) dp[i][j] = dp[i - 1][j];\n            // 如果能装下,就将值更新为 不装这个物品的最大值 和 装这个物品的最大值 中的 最大值\n            // 装这个物品的最大值由容量为j - weight[i]的包任意放入序号为[0, i - 1]的最大值 + 该物品的价值构成\n            else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\n        }\n    }\n    cout \u0026lt;\u0026lt; dp[weight.size() - 1][bagweight] \u0026lt;\u0026lt; endl;\n}\n\nint main() {\n    while(cin \u0026gt;\u0026gt; n \u0026gt;\u0026gt; bagweight) {\n        solve();\n    }\n    return 0;\n}\n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e二维dp数组实现\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003ebits/stdc++.h\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enamespace\u003c/span\u003e \u003cspan class=\"pl-en\"\u003estd\u003c/span\u003e\u003cspan class=\"pl-k\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e n, bagweight;\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e bagweight代表行李箱空间\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003esolve\u003c/span\u003e() {\n    vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; \u003cspan class=\"pl-c1\"\u003eweight\u003c/span\u003e(n, \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e); \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 存储每件物品所占空间\u003c/span\u003e\n    vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; \u003cspan class=\"pl-c1\"\u003evalue\u003c/span\u003e(n, \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e);  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 存储每件物品价值\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e i = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; i \u0026lt; n; ++i) {\n        cin \u0026gt;\u0026gt; weight[i];\n    }\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e j = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; j \u0026lt; n; ++j) {\n        cin \u0026gt;\u0026gt; value[j];\n    }\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值\u003c/span\u003e\n    vector\u0026lt;vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt;\u0026gt; \u003cspan class=\"pl-c1\"\u003edp\u003c/span\u003e(weight.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e(), vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt;(bagweight + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e));\n\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 初始化, 因为需要用到dp[i - 1]的值\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e j \u0026lt; weight[0]已在上方被初始化为0\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e j \u0026gt;= weight[0]的值就初始化为value[0]\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e j = weight[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]; j \u0026lt;= bagweight; j++) {\n        dp[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e][j] = value[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e];\n    }\n\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e i = \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; i \u0026lt; weight.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e(); i++) { \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 遍历科研物品\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e j = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; j \u0026lt;= bagweight; j++) { \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 遍历行李箱容量\u003c/span\u003e\n            \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 如果装不下这个物品,那么就继承dp[i - 1][j]的值\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (j \u0026lt; weight[i]) dp[i][j] = dp[i - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][j];\n            \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 如果能装下,就将值更新为 不装这个物品的最大值 和 装这个物品的最大值 中的 最大值\u003c/span\u003e\n            \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 装这个物品的最大值由容量为j - weight[i]的包任意放入序号为[0, i - 1]的最大值 + 该物品的价值构成\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e dp[i][j] = \u003cspan class=\"pl-c1\"\u003emax\u003c/span\u003e(dp[i - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][j], dp[i - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][j - weight[i]] + value[i]);\n        }\n    }\n    cout \u0026lt;\u0026lt; dp[weight.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e() - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][bagweight] \u0026lt;\u0026lt; endl;\n}\n\n\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e() {\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e(cin \u0026gt;\u0026gt; n \u0026gt;\u0026gt; bagweight) {\n        \u003cspan class=\"pl-c1\"\u003esolve\u003c/span\u003e();\n    }\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e;\n}\n\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e总结\u003c/h2\u003e\u003ca id=\"user-content-总结\" class=\"anchor\" aria-label=\"Permalink: 总结\" href=\"#总结\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e讲了这么多才刚刚把二维dp的01背包讲完，\u003cstrong\u003e这里大家其实可以发现最简单的是推导公式了，推导公式估计看一遍就记下来了，但难就难在如何初始化和遍历顺序上\u003c/strong\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e可能有的同学并没有注意到初始化 和 遍历顺序的重要性，我们后面做力扣上背包面试题目的时候，大家就会感受出来了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e下一篇 还是理论基础，我们再来讲一维dp数组实现的01背包（滚动数组），分析一下和二维有什么区别，在初始化和遍历顺序上又有什么差异，敬请期待！\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e其他语言版本\u003c/h2\u003e\u003ca id=\"user-content-其他语言版本\" class=\"anchor\" aria-label=\"Permalink: 其他语言版本\" href=\"#其他语言版本\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJava\u003c/h3\u003e\u003ca id=\"user-content-java\" class=\"anchor\" aria-label=\"Permalink: Java\" href=\"#java\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"public class BagProblem {\n    public static void main(String[] args) {\n        int[] weight = {1,3,4};\n        int[] value = {15,20,30};\n        int bagSize = 4;\n        testWeightBagProblem(weight,value,bagSize);\n    }\n\n    /**\n     * 动态规划获得结果\n     * @param weight  物品的重量\n     * @param value   物品的价值\n     * @param bagSize 背包的容量\n     */\n    public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){\n\n        // 创建dp数组\n        int goods = weight.length;  // 获取物品的数量\n        int[][] dp = new int[goods][bagSize + 1];\n\n        // 初始化dp数组\n        // 创建数组后，其中默认的值就是0\n        for (int j = weight[0]; j \u0026lt;= bagSize; j++) {\n            dp[0][j] = value[0];\n        }\n\n        // 填充dp数组\n        for (int i = 1; i \u0026lt; weight.length; i++) {\n            for (int j = 1; j \u0026lt;= bagSize; j++) {\n                if (j \u0026lt; weight[i]) {\n                    /**\n                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的\n                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值\n                     */\n                    dp[i][j] = dp[i-1][j];\n                } else {\n                    /**\n                     * 当前背包的容量可以放下物品i\n                     * 那么此时分两种情况：\n                     *    1、不放物品i\n                     *    2、放物品i\n                     * 比较这两种情况下，哪种背包中物品的最大价值最大\n                     */\n                    dp[i][j] = Math.max(dp[i-1][j] , dp[i-1][j-weight[i]] + value[i]);\n                }\n            }\n        }\n\n        // 打印dp数组\n        for (int i = 0; i \u0026lt; goods; i++) {\n            for (int j = 0; j \u0026lt;= bagSize; j++) {\n                System.out.print(dp[i][j] + \u0026quot;\\t\u0026quot;);\n            }\n            System.out.println(\u0026quot;\\n\u0026quot;);\n        }\n    }\n}\n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eBagProblem\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eString\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003eargs\u003c/span\u003e) {\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e = {\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e};\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e = {\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e};\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e;\n        \u003cspan class=\"pl-en\"\u003etestWeightBagProblem\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e,\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e,\u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e);\n    }\n\n    \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * 动态规划获得结果\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @param weight  物品的重量\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @param value   物品的价值\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @param bagSize 背包的容量\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     */\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etestWeightBagProblem\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e){\n\n        \u003cspan class=\"pl-c\"\u003e// 创建dp数组\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003egoods\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e;  \u003cspan class=\"pl-c\"\u003e// 获取物品的数量\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[][] \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003egoods\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e];\n\n        \u003cspan class=\"pl-c\"\u003e// 初始化dp数组\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// 创建数组后，其中默认的值就是0\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u0026lt;= \u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e++) {\n            \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] = \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e];\n        }\n\n        \u003cspan class=\"pl-c\"\u003e// 填充dp数组\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e++) {\n            \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u0026lt;= \u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e++) {\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]) {\n                    \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     */\u003c/span\u003e\n                    \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] = \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e];\n                } \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e {\n                    \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 当前背包的容量可以放下物品i\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 那么此时分两种情况：\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     *    1、不放物品i\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     *    2、放物品i\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 比较这两种情况下，哪种背包中物品的最大价值最大\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     */\u003c/span\u003e\n                    \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] = \u003cspan class=\"pl-smi\"\u003eMath\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] , \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e-\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]] + \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]);\n                }\n            }\n        }\n\n        \u003cspan class=\"pl-c\"\u003e// 打印dp数组\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003egoods\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e++) {\n            \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u0026lt;= \u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e++) {\n                \u003cspan class=\"pl-smi\"\u003eSystem\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eout\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] + \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-cce\"\u003e\\t\u003c/span\u003e\"\u003c/span\u003e);\n            }\n            \u003cspan class=\"pl-smi\"\u003eSystem\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eout\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eprintln\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-cce\"\u003e\\n\u003c/span\u003e\"\u003c/span\u003e);\n        }\n    }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import java.util.Arrays;\n\npublic class BagProblem {\n    public static void main(String[] args) {\n        int[] weight = {1,3,4};\n        int[] value = {15,20,30};\n        int bagSize = 4;\n        testWeightBagProblem(weight,value,bagSize);\n    }\n\n    /**\n     * 初始化 dp 数组做了简化(给物品增加冗余维)。这样初始化dp数组，默认全为0即可。\n     * dp[i][j] 表示从下标为[0 - i-1]的物品里任意取，放进容量为j的背包，价值总和最大是多少。\n     * 其实是模仿背包重量从 0 开始，背包容量 j 为 0 的话，即dp[i][0]，无论是选取哪些物品，背包价值总和一定为 0。\n     * 可选物品也可以从无开始，也就是没有物品可选，即dp[0][j]，这样无论背包容量为多少，背包价值总和一定为 0。\n     * @param weight  物品的重量\n     * @param value   物品的价值\n     * @param bagSize 背包的容量\n     */\n    public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){\n\n        // 创建dp数组\n        int goods = weight.length;  // 获取物品的数量\n        int[][] dp = new int[goods + 1][bagSize + 1];  // 给物品增加冗余维，i = 0 表示没有物品可选\n\n        // 初始化dp数组，默认全为0即可\n        // 填充dp数组\n        for (int i = 1; i \u0026lt;= goods; i++) {\n            for (int j = 1; j \u0026lt;= bagSize; j++) {\n                if (j \u0026lt; weight[i - 1]) {  // i - 1 对应物品 i\n                    /**\n                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的\n                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值\n                     */\n                    dp[i][j] = dp[i - 1][j];\n                } else {\n                    /**\n                     * 当前背包的容量可以放下物品i\n                     * 那么此时分两种情况：\n                     *    1、不放物品i\n                     *    2、放物品i\n                     * 比较这两种情况下，哪种背包中物品的最大价值最大\n                     */\n                    dp[i][j] = Math.max(dp[i - 1][j] , dp[i - 1][j - weight[i - 1]] + value[i - 1]);  // i - 1 对应物品 i\n                }\n            }\n        }\n\n        // 打印dp数组\n        for(int[] arr : dp){\n            System.out.println(Arrays.toString(arr));\n        }\n    }\n}\n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejava\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eutil\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eArrays\u003c/span\u003e;\n\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eBagProblem\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eString\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003eargs\u003c/span\u003e) {\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e = {\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e};\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e = {\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e};\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e;\n        \u003cspan class=\"pl-en\"\u003etestWeightBagProblem\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e,\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e,\u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e);\n    }\n\n    \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * 初始化 dp 数组做了简化(给物品增加冗余维)。这样初始化dp数组，默认全为0即可。\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * dp[i][j] 表示从下标为[0 - i-1]的物品里任意取，放进容量为j的背包，价值总和最大是多少。\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * 其实是模仿背包重量从 0 开始，背包容量 j 为 0 的话，即dp[i][0]，无论是选取哪些物品，背包价值总和一定为 0。\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * 可选物品也可以从无开始，也就是没有物品可选，即dp[0][j]，这样无论背包容量为多少，背包价值总和一定为 0。\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @param weight  物品的重量\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @param value   物品的价值\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @param bagSize 背包的容量\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     */\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etestWeightBagProblem\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e){\n\n        \u003cspan class=\"pl-c\"\u003e// 创建dp数组\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003egoods\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e;  \u003cspan class=\"pl-c\"\u003e// 获取物品的数量\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[][] \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003egoods\u003c/span\u003e + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e];  \u003cspan class=\"pl-c\"\u003e// 给物品增加冗余维，i = 0 表示没有物品可选\u003c/span\u003e\n\n        \u003cspan class=\"pl-c\"\u003e// 初始化dp数组，默认全为0即可\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// 填充dp数组\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u0026lt;= \u003cspan class=\"pl-s1\"\u003egoods\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e++) {\n            \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u0026lt;= \u003cspan class=\"pl-s1\"\u003ebagSize\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e++) {\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]) {  \u003cspan class=\"pl-c\"\u003e// i - 1 对应物品 i\u003c/span\u003e\n                    \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     */\u003c/span\u003e\n                    \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] = \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e];\n                } \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e {\n                    \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 当前背包的容量可以放下物品i\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 那么此时分两种情况：\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     *    1、不放物品i\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     *    2、放物品i\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     * 比较这两种情况下，哪种背包中物品的最大价值最大\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e                     */\u003c/span\u003e\n                    \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] = \u003cspan class=\"pl-smi\"\u003eMath\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] , \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e - \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]] + \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]);  \u003cspan class=\"pl-c\"\u003e// i - 1 对应物品 i\u003c/span\u003e\n                }\n            }\n        }\n\n        \u003cspan class=\"pl-c\"\u003e// 打印dp数组\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e : \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e){\n            \u003cspan class=\"pl-smi\"\u003eSystem\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eout\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eprintln\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eArrays\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003etoString\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e));\n        }\n    }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePython\u003c/h3\u003e\u003ca id=\"user-content-python\" class=\"anchor\" aria-label=\"Permalink: Python\" href=\"#python\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e无参数版\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def test_2_wei_bag_problem1():\n    weight = [1, 3, 4]\n    value = [15, 20, 30]\n    bagweight = 4\n\n    # 二维数组\n    dp = [[0] * (bagweight + 1) for _ in range(len(weight))]\n\n    # 初始化\n    for j in range(weight[0], bagweight + 1):\n        dp[0][j] = value[0]\n\n    # weight数组的大小就是物品个数\n    for i in range(1, len(weight)):  # 遍历物品\n        for j in range(bagweight + 1):  # 遍历背包容量\n            if j \u0026lt; weight[i]:\n                dp[i][j] = dp[i - 1][j]\n            else:\n                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])\n\n    print(dp[len(weight) - 1][bagweight])\n\ntest_2_wei_bag_problem1()\n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest_2_wei_bag_problem1\u003c/span\u003e():\n    \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e]\n    \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e]\n    \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\n\n    \u003cspan class=\"pl-c\"\u003e# 二维数组\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e))]\n\n    \u003cspan class=\"pl-c\"\u003e# 初始化\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e], \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e):\n        \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]\n\n    \u003cspan class=\"pl-c\"\u003e# weight数组的大小就是物品个数\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e)):  \u003cspan class=\"pl-c\"\u003e# 遍历物品\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e):  \u003cspan class=\"pl-c\"\u003e# 遍历背包容量\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]:\n                \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e]\n            \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e:\n                \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e], \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]] \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e])\n\n    \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e])\n\n\u003cspan class=\"pl-en\"\u003etest_2_wei_bag_problem1\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e有参数版\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def test_2_wei_bag_problem1(weight, value, bagweight):\n    # 二维数组\n    dp = [[0] * (bagweight + 1) for _ in range(len(weight))]\n\n    # 初始化\n    for j in range(weight[0], bagweight + 1):\n        dp[0][j] = value[0]\n\n    # weight数组的大小就是物品个数\n    for i in range(1, len(weight)):  # 遍历物品\n        for j in range(bagweight + 1):  # 遍历背包容量\n            if j \u0026lt; weight[i]:\n                dp[i][j] = dp[i - 1][j]\n            else:\n                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])\n\n    return dp[len(weight) - 1][bagweight]\n\nif __name__ == \u0026quot;__main__\u0026quot;:\n\n    weight = [1, 3, 4]\n    value = [15, 20, 30]\n    bagweight = 4\n\n    result = test_2_wei_bag_problem1(weight, value, bagweight)\n    print(result)\n\n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest_2_wei_bag_problem1\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e):\n    \u003cspan class=\"pl-c\"\u003e# 二维数组\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e))]\n\n    \u003cspan class=\"pl-c\"\u003e# 初始化\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e], \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e):\n        \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]\n\n    \u003cspan class=\"pl-c\"\u003e# weight数组的大小就是物品个数\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e)):  \u003cspan class=\"pl-c\"\u003e# 遍历物品\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e):  \u003cspan class=\"pl-c\"\u003e# 遍历背包容量\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]:\n                \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e]\n            \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e:\n                \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e], \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]] \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e])\n\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e]\n\n\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e__name__\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"__main__\"\u003c/span\u003e:\n\n    \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e]\n    \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e]\n    \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\n\n    \u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest_2_wei_bag_problem1\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e)\n    \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e)\n\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eGo\u003c/h3\u003e\u003ca id=\"user-content-go\" class=\"anchor\" aria-label=\"Permalink: Go\" href=\"#go\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-go notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func test_2_wei_bag_problem1(weight, value []int, bagweight int) int {\n\t// 定义dp数组\n\tdp := make([][]int, len(weight))\n\tfor i, _ := range dp {\n\t\tdp[i] = make([]int, bagweight+1)\n\t}\n\t// 初始化\n\tfor j := bagweight; j \u0026gt;= weight[0]; j-- {\n\t\tdp[0][j] = dp[0][j-weight[0]] + value[0]\n\t}\n\t// 递推公式\n\tfor i := 1; i \u0026lt; len(weight); i++ {\n\t\t//正序,也可以倒序\n\t    for j := 0; j \u0026lt;= bagweight; j++ {\n\t        if j \u0026lt; weight[i] {\n\t            dp[i][j] = dp[i-1][j]\n\t        } else {\n\t            dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i])\n\t        }\n\t    }\n\t}\n\treturn dp[len(weight)-1][bagweight]\n}\n\nfunc max(a,b int) int {\n\tif a \u0026gt; b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc main() {\n\tweight := []int{1,3,4}\n\tvalue := []int{15,20,30}\n\ttest_2_wei_bag_problem1(weight,value,4)\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etest_2_wei_bag_problem1\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e []\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e) \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e {\n\t\u003cspan class=\"pl-c\"\u003e// 定义dp数组\u003c/span\u003e\n\t\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emake\u003c/span\u003e([][]\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e))\n\t\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003erange\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e {\n\t\t\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emake\u003c/span\u003e([]\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e)\n\t}\n\t\u003cspan class=\"pl-c\"\u003e// 初始化\u003c/span\u003e\n\t\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e--\u003c/span\u003e {\n\t\t\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]] \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]\n\t}\n\t\u003cspan class=\"pl-c\"\u003e// 递推公式\u003c/span\u003e\n\t\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e); \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e {\n\t\t\u003cspan class=\"pl-c\"\u003e//正序,也可以倒序\u003c/span\u003e\n\t    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e {\n\t        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e] {\n\t            \u003cspan class=\"pl-smi\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-smi\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-smi\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e]\n\t        } \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e {\n\t            \u003cspan class=\"pl-smi\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-smi\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-smi\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emax\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e], \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]]\u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e])\n\t        }\n\t    }\n\t}\n\t\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e)\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ebagweight\u003c/span\u003e]\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emax\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e,\u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e) \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e {\n\t\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e {\n\t\t\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\n\t}\n\t\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emain\u003c/span\u003e() {\n\t\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e []\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e{\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e}\n\t\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e []\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e{\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e}\n\t\u003cspan class=\"pl-s1\"\u003etest_2_wei_bag_problem1\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e,\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e)\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJavascript\u003c/h3\u003e\u003ca id=\"user-content-javascript\" class=\"anchor\" aria-label=\"Permalink: Javascript\" href=\"#javascript\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"function testWeightBagProblem (weight, value, size) {\n    // 定义 dp 数组\n    const len = weight.length,\n          dp = Array(len).fill().map(() =\u0026gt; Array(size + 1).fill(0));\n\n    // 初始化\n    for(let j = weight[0]; j \u0026lt;= size; j++) {\n        dp[0][j] = value[0];\n    }\n\n    // weight 数组的长度len 就是物品个数\n    for(let i = 1; i \u0026lt; len; i++) { // 遍历物品\n        for(let j = 0; j \u0026lt;= size; j++) { // 遍历背包容量\n            if(j \u0026lt; weight[i]) dp[i][j] = dp[i - 1][j];\n            else dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\n        }\n    }\n\n    console.table(dp)\n\n    return dp[len - 1][size];\n}\n\nfunction test () {\n    console.log(testWeightBagProblem([1, 3, 4, 5], [15, 20, 30, 55], 6));\n}\n\ntest();\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etestWeightBagProblem\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e// 定义 dp 数组\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n          \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efill\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emap\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efill\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"pl-c\"\u003e// 初始化\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n    \u003cspan class=\"pl-c\"\u003e// weight 数组的长度len 就是物品个数\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// 遍历物品\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// 遍历背包容量\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMath\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n    \u003cspan class=\"pl-smi\"\u003econsole\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etable\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-smi\"\u003econsole\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elog\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etestWeightBagProblem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e55\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003etest\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC\u003c/h3\u003e\u003ca id=\"user-content-c\" class=\"anchor\" aria-label=\"Permalink: C\" href=\"#c\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-c notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"#include \u0026lt;stdio.h\u0026gt;\n#include \u0026lt;stdlib.h\u0026gt;\n#include \u0026lt;string.h\u0026gt;\n\n#define MAX(a, b) (((a) \u0026gt; (b)) ? (a) : (b))\n#define ARR_SIZE(a) (sizeof((a)) / sizeof((a)[0]))\n#define BAG_WEIGHT 4\n\nvoid backPack(int* weights, int weightSize, int* costs, int costSize, int bagWeight) {\n    // 开辟dp数组\n    int dp[weightSize][bagWeight + 1];\n    memset(dp, 0, sizeof(int) * weightSize * (bagWeight + 1));\n\n    int i, j;\n    // 当背包容量大于物品0的重量时，将物品0放入到背包中\n    for(j = weights[0]; j \u0026lt;= bagWeight; ++j) {\n        dp[0][j] = costs[0];\n    }\n\n    // 先遍历物品，再遍历重量\n    for(j = 1; j \u0026lt;= bagWeight; ++j) {\n        for(i = 1; i \u0026lt; weightSize; ++i) {\n            // 如果当前背包容量小于物品重量\n            if(j \u0026lt; weights[i])\n                // 背包物品的价值等于背包不放置当前物品时的价值\n                dp[i][j] = dp[i-1][j];\n            // 若背包当前重量可以放置物品\n            else\n                // 背包的价值等于放置该物品或不放置该物品的最大值\n                dp[i][j] = MAX(dp[i - 1][j],  dp[i - 1][j - weights[i]] + costs[i]);\n        }\n    }\n\n    printf(\u0026quot;%d\\n\u0026quot;, dp[weightSize - 1][bagWeight]);\n}\n\nint main(int argc, char* argv[]) {\n    int weights[] = {1, 3, 4};\n    int costs[] = {15, 20, 30};\n    backPack(weights, ARR_SIZE(weights), costs, ARR_SIZE(costs), BAG_WEIGHT);\n    return 0;\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003e#include\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u0026lt;stdio.h\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003e#include\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u0026lt;stdlib.h\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003e#include\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u0026lt;string.h\u0026gt;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003e#define\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMAX\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e) (((a) \u0026gt; (b)) ? (a) : (b))\n\u003cspan class=\"pl-k\"\u003e#define\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eARR_SIZE\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e) (sizeof((a)) / sizeof((a)[0]))\n\u003cspan class=\"pl-k\"\u003e#define\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eBAG_WEIGHT\u003c/span\u003e 4\n\n\u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ebackPack\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweights\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweightSize\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecosts\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecostSize\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebagWeight\u003c/span\u003e) {\n    \u003cspan class=\"pl-c\"\u003e// 开辟dp数组\u003c/span\u003e\n    \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003eweightSize\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ebagWeight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e];\n    \u003cspan class=\"pl-en\"\u003ememset\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e, \u003cspan class=\"pl-k\"\u003esizeof\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweightSize\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003ebagWeight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e));\n\n    \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e;\n    \u003cspan class=\"pl-c\"\u003e// 当背包容量大于物品0的重量时，将物品0放入到背包中\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweights\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u0026lt;= \u003cspan class=\"pl-s1\"\u003ebagWeight\u003c/span\u003e; \u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e) {\n        \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecosts\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e];\n    }\n\n    \u003cspan class=\"pl-c\"\u003e// 先遍历物品，再遍历重量\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u0026lt;= \u003cspan class=\"pl-s1\"\u003ebagWeight\u003c/span\u003e; \u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e) {\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweightSize\u003c/span\u003e; \u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e) {\n            \u003cspan class=\"pl-c\"\u003e// 如果当前背包容量小于物品重量\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweights\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e])\n                \u003cspan class=\"pl-c\"\u003e// 背包物品的价值等于背包不放置当前物品时的价值\u003c/span\u003e\n                \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e];\n            \u003cspan class=\"pl-c\"\u003e// 若背包当前重量可以放置物品\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e\n                \u003cspan class=\"pl-c\"\u003e// 背包的价值等于放置该物品或不放置该物品的最大值\u003c/span\u003e\n                \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMAX\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e],  \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweights\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]] \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecosts\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]);\n        }\n    }\n\n    \u003cspan class=\"pl-en\"\u003eprintf\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"%d\\n\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003eweightSize\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s1\"\u003ebagWeight\u003c/span\u003e]);\n}\n\n\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eargc\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eargv\u003c/span\u003e[]) {\n    \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweights\u003c/span\u003e[] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e {\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e};\n    \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecosts\u003c/span\u003e[] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e {\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e};\n    \u003cspan class=\"pl-en\"\u003ebackPack\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweights\u003c/span\u003e, \u003cspan class=\"pl-en\"\u003eARR_SIZE\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eweights\u003c/span\u003e), \u003cspan class=\"pl-s1\"\u003ecosts\u003c/span\u003e, \u003cspan class=\"pl-en\"\u003eARR_SIZE\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ecosts\u003c/span\u003e), \u003cspan class=\"pl-c1\"\u003eBAG_WEIGHT\u003c/span\u003e);\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e;\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTypeScript\u003c/h3\u003e\u003ca id=\"user-content-typescript\" class=\"anchor\" aria-label=\"Permalink: TypeScript\" href=\"#typescript\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ts notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"function testWeightBagProblem(\n  weight: number[],\n  value: number[],\n  size: number\n): number {\n  /**\n   * dp[i][j]: 前i个物品，背包容量为j，能获得的最大价值\n   * dp[0][*]: u=weight[0],u之前为0，u之后（含u）为value[0]\n   * dp[*][0]: 0\n   * ...\n   * dp[i][j]: max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]);\n   */\n  const goodsNum: number = weight.length;\n  const dp: number[][] = new Array(goodsNum)\n    .fill(0)\n    .map((_) =\u0026gt; new Array(size + 1).fill(0));\n  for (let i = weight[0]; i \u0026lt;= size; i++) {\n    dp[0][i] = value[0];\n  }\n  for (let i = 1; i \u0026lt; goodsNum; i++) {\n    for (let j = 1; j \u0026lt;= size; j++) {\n      if (j \u0026lt; weight[i]) {\n        dp[i][j] = dp[i - 1][j];\n      } else {\n        dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);\n      }\n    }\n  }\n  return dp[goodsNum - 1][size];\n}\n// test\nconst weight = [1, 3, 4];\nconst value = [15, 20, 30];\nconst size = 4;\nconsole.log(testWeightBagProblem(weight, value, size));\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etestWeightBagProblem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\n  \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n  \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n  \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e   * dp[i][j]: 前i个物品，背包容量为j，能获得的最大价值\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e   * dp[0][*]: u=weight[0],u之前为0，u之后（含u）为value[0]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e   * dp[*][0]: 0\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e   * ...\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e   * dp[i][j]: max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]);\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e   */\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003egoodsNum\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003egoodsNum\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efill\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emap\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efill\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003egoodsNum\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n      \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n      \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMath\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n      \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003egoodsNum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// test\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003econsole\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elog\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etestWeightBagProblem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eScala\u003c/h3\u003e\u003ca id=\"user-content-scala\" class=\"anchor\" aria-label=\"Permalink: Scala\" href=\"#scala\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-scala notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"object Solution {\n  // 01背包\n  def test_2_wei_bag_problem1(): Unit = {\n    var weight = Array[Int](1, 3, 4)\n    var value = Array[Int](15, 20, 30)\n    var baseweight = 4\n\n    // 二维数组\n    var dp = Array.ofDim[Int](weight.length, baseweight + 1)\n\n    // 初始化\n    for (j \u0026lt;- weight(0) to baseweight) {\n      dp(0)(j) = value(0)\n    }\n\n    // 遍历\n    for (i \u0026lt;- 1 until weight.length; j \u0026lt;- 1 to baseweight) {\n      if (j - weight(i) \u0026gt;= 0) dp(i)(j) = dp(i - 1)(j - weight(i)) + value(i)\n      dp(i)(j) = math.max(dp(i)(j), dp(i - 1)(j))\n    }\n\n    // 打印数组\n    dp.foreach(x =\u0026gt; println(\u0026quot;[\u0026quot; + x.mkString(\u0026quot;,\u0026quot;) + \u0026quot;]\u0026quot;))\n\n    dp(weight.length - 1)(baseweight) // 最终返回\n  }\n\n  def main(args: Array[String]): Unit = {\n    test_2_wei_bag_problem1()\n  }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eobject\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 01背包\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest_2_wei_bag_problem1\u003c/span\u003e()\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eUnit\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eweight\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e](\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e)\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e](\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e)\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ebaseweight\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\n\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 二维数组\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003edp\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e.ofDim[\u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e](weight.length, baseweight \u003cspan class=\"pl-k\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e)\n\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 初始化\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (j \u003cspan class=\"pl-k\"\u003e\u0026lt;-\u003c/span\u003e weight(\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e) to baseweight) {\n      dp(\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e)(j) \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e value(\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e)\n    }\n\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 遍历\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (i \u003cspan class=\"pl-k\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e until weight.length; j \u003cspan class=\"pl-k\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e to baseweight) {\n      \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (j \u003cspan class=\"pl-k\"\u003e-\u003c/span\u003e weight(i) \u003cspan class=\"pl-k\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e) dp(i)(j) \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e dp(i \u003cspan class=\"pl-k\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e)(j \u003cspan class=\"pl-k\"\u003e-\u003c/span\u003e weight(i)) \u003cspan class=\"pl-k\"\u003e+\u003c/span\u003e value(i)\n      dp(i)(j) \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e math.max(dp(i)(j), dp(i \u003cspan class=\"pl-k\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e)(j))\n    }\n\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 打印数组\u003c/span\u003e\n    dp.foreach(x \u003cspan class=\"pl-k\"\u003e=\u0026gt;\u003c/span\u003e println(\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e[\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e+\u003c/span\u003e x.mkString(\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e,\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e]\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e))\n\n    dp(weight.length \u003cspan class=\"pl-k\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e)(baseweight) \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 最终返回\u003c/span\u003e\n  }\n\n  \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003eargs\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eString\u003c/span\u003e])\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eUnit\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e {\n    test_2_wei_bag_problem1()\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRust\u003c/h3\u003e\u003ca id=\"user-content-rust\" class=\"anchor\" aria-label=\"Permalink: Rust\" href=\"#rust\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-rust notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pub struct Solution;\n\nimpl Solution {\n    pub fn wei_bag_problem1(weight: Vec\u0026lt;usize\u0026gt;, value: Vec\u0026lt;usize\u0026gt;, bag_size: usize) -\u0026gt; usize {\n        let mut dp = vec![vec![0; bag_size + 1]; weight.len()];\n        for j in weight[0]..=weight.len() {\n            dp[0][j] = value[0];\n        }\n\n        for i in 1..weight.len() {\n            for j in 0..=bag_size {\n                match j \u0026lt; weight[i] {\n                    true =\u0026gt; dp[i][j] = dp[i - 1][j],\n                    false =\u0026gt; dp[i][j] = dp[i - 1][j].max(dp[i - 1][j - weight[i]] + value[i]),\n                }\n            }\n        }\n        dp[weight.len() - 1][bag_size]\n    }\n}\n\n#[test]\nfn test_wei_bag_problem1() {\n    println!(\n        \u0026quot;{}\u0026quot;,\n        Solution::wei_bag_problem1(vec![1, 3, 4], vec![15, 20, 30], 4)\n    );\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003epub\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eimpl\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epub\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efn\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ewei_bag_problem1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eweight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eVec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eusize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eVec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eusize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebag_size\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eusize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e -\u0026gt; \u003cspan class=\"pl-smi\"\u003eusize\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-k\"\u003emut\u003c/span\u003e dp = \u003cspan class=\"pl-en\"\u003evec\u003c/span\u003e\u003cspan class=\"pl-en\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003evec!\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e bag_size + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e weight\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003elen\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e j \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e weight\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e..=weight\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            dp\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ej\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e = value\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e i \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e..weight\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e j \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e..=bag_size \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-k\"\u003ematch\u003c/span\u003e j \u0026lt; weight\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e =\u0026gt; dp\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ej\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e = dp\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ej\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e =\u0026gt; dp\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ej\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e = dp\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ej\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003edp\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ej - weight\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e + value\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        dp\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eweight\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ebag_size\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-c1\"\u003e#\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003etest\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efn\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest_wei_bag_problem1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003eprintln\u003c/span\u003e\u003cspan class=\"pl-en\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\n        \u003cspan class=\"pl-s\"\u003e\"{}\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e::\u003c/span\u003ewei_bag_problem1\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003evec!\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e vec!\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp align=\"center\" dir=\"auto\"\u003e\n\u003ca href=\"https://programmercarl.com/other/kstar.html\" rel=\"nofollow\"\u003e\n  \u003cimg src=\"/feinan/leetcode-master/raw/master/pics/网站星球宣传海报.jpg\" width=\"1000\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"动态规划：01背包理论基础","fully_qualified_name":"动态规划：01背包理论基础","kind":"section_1","ident_start":345,"ident_end":380,"extent_start":343,"extent_end":25524,"ident_utf16":{"start":{"line_number":8,"utf16_col":2},"end":{"line_number":8,"utf16_col":15}},"extent_utf16":{"start":{"line_number":8,"utf16_col":0},"end":{"line_number":747,"utf16_col":0}}},{"name":"算法公开课","fully_qualified_name":"算法公开课","kind":"section_2","ident_start":533,"ident_end":548,"extent_start":530,"extent_end":811,"ident_utf16":{"start":{"line_number":13,"utf16_col":3},"end":{"line_number":13,"utf16_col":8}},"extent_utf16":{"start":{"line_number":13,"utf16_col":0},"end":{"line_number":17,"utf16_col":0}}},{"name":"思路","fully_qualified_name":"思路","kind":"section_2","ident_start":814,"ident_end":820,"extent_start":811,"extent_end":13146,"ident_utf16":{"start":{"line_number":17,"utf16_col":3},"end":{"line_number":17,"utf16_col":5}},"extent_utf16":{"start":{"line_number":17,"utf16_col":0},"end":{"line_number":316,"utf16_col":0}}},{"name":"01 背包","fully_qualified_name":"01 背包","kind":"section_3","ident_start":2284,"ident_end":2293,"extent_start":2280,"extent_end":3543,"ident_utf16":{"start":{"line_number":45,"utf16_col":4},"end":{"line_number":45,"utf16_col":9}},"extent_utf16":{"start":{"line_number":45,"utf16_col":0},"end":{"line_number":75,"utf16_col":0}}},{"name":"二维dp数组01背包","fully_qualified_name":"二维dp数组01背包","kind":"section_3","ident_start":3547,"ident_end":3569,"extent_start":3543,"extent_end":13146,"ident_utf16":{"start":{"line_number":75,"utf16_col":4},"end":{"line_number":75,"utf16_col":14}},"extent_utf16":{"start":{"line_number":75,"utf16_col":0},"end":{"line_number":316,"utf16_col":0}}},{"name":"总结","fully_qualified_name":"总结","kind":"section_2","ident_start":13149,"ident_end":13155,"extent_start":13146,"extent_end":13748,"ident_utf16":{"start":{"line_number":316,"utf16_col":3},"end":{"line_number":316,"utf16_col":5}},"extent_utf16":{"start":{"line_number":316,"utf16_col":0},"end":{"line_number":327,"utf16_col":0}}},{"name":"其他语言版本","fully_qualified_name":"其他语言版本","kind":"section_2","ident_start":13751,"ident_end":13769,"extent_start":13748,"extent_end":25524,"ident_utf16":{"start":{"line_number":327,"utf16_col":3},"end":{"line_number":327,"utf16_col":9}},"extent_utf16":{"start":{"line_number":327,"utf16_col":0},"end":{"line_number":747,"utf16_col":0}}},{"name":"Java","fully_qualified_name":"Java","kind":"section_3","ident_start":13775,"ident_end":13779,"extent_start":13771,"extent_end":18207,"ident_utf16":{"start":{"line_number":329,"utf16_col":4},"end":{"line_number":329,"utf16_col":8}},"extent_utf16":{"start":{"line_number":329,"utf16_col":0},"end":{"line_number":450,"utf16_col":0}}},{"name":"Python","fully_qualified_name":"Python","kind":"section_3","ident_start":18211,"ident_end":18217,"extent_start":18207,"extent_end":19722,"ident_utf16":{"start":{"line_number":450,"utf16_col":4},"end":{"line_number":450,"utf16_col":10}},"extent_utf16":{"start":{"line_number":450,"utf16_col":0},"end":{"line_number":511,"utf16_col":0}}},{"name":"Go","fully_qualified_name":"Go","kind":"section_3","ident_start":19726,"ident_end":19728,"extent_start":19722,"extent_end":20532,"ident_utf16":{"start":{"line_number":511,"utf16_col":4},"end":{"line_number":511,"utf16_col":6}},"extent_utf16":{"start":{"line_number":511,"utf16_col":0},"end":{"line_number":552,"utf16_col":0}}},{"name":"Javascript","fully_qualified_name":"Javascript","kind":"section_3","ident_start":20536,"ident_end":20546,"extent_start":20532,"extent_end":21324,"ident_utf16":{"start":{"line_number":552,"utf16_col":4},"end":{"line_number":552,"utf16_col":14}},"extent_utf16":{"start":{"line_number":552,"utf16_col":0},"end":{"line_number":586,"utf16_col":0}}},{"name":"C","fully_qualified_name":"C","kind":"section_3","ident_start":21328,"ident_end":21329,"extent_start":21324,"extent_end":22751,"ident_utf16":{"start":{"line_number":586,"utf16_col":4},"end":{"line_number":586,"utf16_col":5}},"extent_utf16":{"start":{"line_number":586,"utf16_col":0},"end":{"line_number":634,"utf16_col":0}}},{"name":"TypeScript","fully_qualified_name":"TypeScript","kind":"section_3","ident_start":22755,"ident_end":22765,"extent_start":22751,"extent_end":23767,"ident_utf16":{"start":{"line_number":634,"utf16_col":4},"end":{"line_number":634,"utf16_col":14}},"extent_utf16":{"start":{"line_number":634,"utf16_col":0},"end":{"line_number":674,"utf16_col":0}}},{"name":"Scala","fully_qualified_name":"Scala","kind":"section_3","ident_start":23771,"ident_end":23776,"extent_start":23767,"extent_end":24564,"ident_utf16":{"start":{"line_number":674,"utf16_col":4},"end":{"line_number":674,"utf16_col":9}},"extent_utf16":{"start":{"line_number":674,"utf16_col":0},"end":{"line_number":710,"utf16_col":0}}},{"name":"Rust","fully_qualified_name":"Rust","kind":"section_3","ident_start":24568,"ident_end":24572,"extent_start":24564,"extent_end":25524,"ident_utf16":{"start":{"line_number":710,"utf16_col":4},"end":{"line_number":710,"utf16_col":8}},"extent_utf16":{"start":{"line_number":710,"utf16_col":0},"end":{"line_number":747,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":793905675,"defaultBranch":"master","name":"leetcode-master","ownerLogin":"feinan","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2024-04-30T05:06:31.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1912535?v=4","public":true,"private":false,"isOrgOwned":false,"isArchived":false},"currentUser":null,"uploadToken":"_g8YR2ZtLlB7Xuy0HvIDlHY_WdiNgD8YLGO7cfhQveS47_hiGQ4YAhyVAQJA4DGzN6DvuDFFLXTRXKFUBJxIXw","allShortcutsEnabled":false,"treeExpanded":true,"path":"problems/背包理论基础01背包-1.md","symbolsExpanded":false,"refInfo":{"name":"master","listCacheKey":"v0:1714453598.065801","canEdit":false,"currentOid":"b07e850a199dae1777d8831e9e811d87725396b4"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"problems":{"items":[{"name":"kamacoder","path":"problems/kamacoder","contentType":"directory"},{"name":"qita","path":"problems/qita","contentType":"directory"},{"name":"前序","path":"problems/前序","contentType":"directory"},{"name":"周总结","path":"problems/周总结","contentType":"directory"},{"name":"0001.两数之和.md","path":"problems/0001.两数之和.md","contentType":"file"},{"name":"0005.最长回文子串.md","path":"problems/0005.最长回文子串.md","contentType":"file"},{"name":"0015.三数之和.md","path":"problems/0015.三数之和.md","contentType":"file"},{"name":"0017.电话号码的字母组合.md","path":"problems/0017.电话号码的字母组合.md","contentType":"file"},{"name":"0018.四数之和.md","path":"problems/0018.四数之和.md","contentType":"file"},{"name":"0019.删除链表的倒数第N个节点.md","path":"problems/0019.删除链表的倒数第N个节点.md","contentType":"file"},{"name":"0020.有效的括号.md","path":"problems/0020.有效的括号.md","contentType":"file"},{"name":"0024.两两交换链表中的节点.md","path":"problems/0024.两两交换链表中的节点.md","contentType":"file"},{"name":"0027.移除元素.md","path":"problems/0027.移除元素.md","contentType":"file"},{"name":"0028.实现strStr.md","path":"problems/0028.实现strStr.md","contentType":"file"},{"name":"0031.下一个排列.md","path":"problems/0031.下一个排列.md","contentType":"file"},{"name":"0034.在排序数组中查找元素的第一个和最后一个位置.md","path":"problems/0034.在排序数组中查找元素的第一个和最后一个位置.md","contentType":"file"},{"name":"0035.搜索插入位置.md","path":"problems/0035.搜索插入位置.md","contentType":"file"},{"name":"0037.解数独.md","path":"problems/0037.解数独.md","contentType":"file"},{"name":"0039.组合总和.md","path":"problems/0039.组合总和.md","contentType":"file"},{"name":"0040.组合总和II.md","path":"problems/0040.组合总和II.md","contentType":"file"},{"name":"0042.接雨水.md","path":"problems/0042.接雨水.md","contentType":"file"},{"name":"0045.跳跃游戏II.md","path":"problems/0045.跳跃游戏II.md","contentType":"file"},{"name":"0046.全排列.md","path":"problems/0046.全排列.md","contentType":"file"},{"name":"0047.全排列II.md","path":"problems/0047.全排列II.md","contentType":"file"},{"name":"0051.N皇后.md","path":"problems/0051.N皇后.md","contentType":"file"},{"name":"0052.N皇后II.md","path":"problems/0052.N皇后II.md","contentType":"file"},{"name":"0053.最大子序和.md","path":"problems/0053.最大子序和.md","contentType":"file"},{"name":"0053.最大子序和（动态规划）.md","path":"problems/0053.最大子序和（动态规划）.md","contentType":"file"},{"name":"0054.螺旋矩阵.md","path":"problems/0054.螺旋矩阵.md","contentType":"file"},{"name":"0055.跳跃游戏.md","path":"problems/0055.跳跃游戏.md","contentType":"file"},{"name":"0056.合并区间.md","path":"problems/0056.合并区间.md","contentType":"file"},{"name":"0059.螺旋矩阵II.md","path":"problems/0059.螺旋矩阵II.md","contentType":"file"},{"name":"0062.不同路径.md","path":"problems/0062.不同路径.md","contentType":"file"},{"name":"0063.不同路径II.md","path":"problems/0063.不同路径II.md","contentType":"file"},{"name":"0070.爬楼梯.md","path":"problems/0070.爬楼梯.md","contentType":"file"},{"name":"0070.爬楼梯完全背包版本.md","path":"problems/0070.爬楼梯完全背包版本.md","contentType":"file"},{"name":"0072.编辑距离.md","path":"problems/0072.编辑距离.md","contentType":"file"},{"name":"0077.组合.md","path":"problems/0077.组合.md","contentType":"file"},{"name":"0077.组合优化.md","path":"problems/0077.组合优化.md","contentType":"file"},{"name":"0078.子集.md","path":"problems/0078.子集.md","contentType":"file"},{"name":"0084.柱状图中最大的矩形.md","path":"problems/0084.柱状图中最大的矩形.md","contentType":"file"},{"name":"0090.子集II.md","path":"problems/0090.子集II.md","contentType":"file"},{"name":"0093.复原IP地址.md","path":"problems/0093.复原IP地址.md","contentType":"file"},{"name":"0096.不同的二叉搜索树.md","path":"problems/0096.不同的二叉搜索树.md","contentType":"file"},{"name":"0098.验证二叉搜索树.md","path":"problems/0098.验证二叉搜索树.md","contentType":"file"},{"name":"0100.相同的树.md","path":"problems/0100.相同的树.md","contentType":"file"},{"name":"0101.对称二叉树.md","path":"problems/0101.对称二叉树.md","contentType":"file"},{"name":"0102.二叉树的层序遍历.md","path":"problems/0102.二叉树的层序遍历.md","contentType":"file"},{"name":"0104.二叉树的最大深度.md","path":"problems/0104.二叉树的最大深度.md","contentType":"file"},{"name":"0106.从中序与后序遍历序列构造二叉树.md","path":"problems/0106.从中序与后序遍历序列构造二叉树.md","contentType":"file"},{"name":"0108.将有序数组转换为二叉搜索树.md","path":"problems/0108.将有序数组转换为二叉搜索树.md","contentType":"file"},{"name":"0110.平衡二叉树.md","path":"problems/0110.平衡二叉树.md","contentType":"file"},{"name":"0111.二叉树的最小深度.md","path":"problems/0111.二叉树的最小深度.md","contentType":"file"},{"name":"0112.路径总和.md","path":"problems/0112.路径总和.md","contentType":"file"},{"name":"0115.不同的子序列.md","path":"problems/0115.不同的子序列.md","contentType":"file"},{"name":"0116.填充每个节点的下一个右侧节点指针.md","path":"problems/0116.填充每个节点的下一个右侧节点指针.md","contentType":"file"},{"name":"0121.买卖股票的最佳时机.md","path":"problems/0121.买卖股票的最佳时机.md","contentType":"file"},{"name":"0122.买卖股票的最佳时机II.md","path":"problems/0122.买卖股票的最佳时机II.md","contentType":"file"},{"name":"0122.买卖股票的最佳时机II（动态规划）.md","path":"problems/0122.买卖股票的最佳时机II（动态规划）.md","contentType":"file"},{"name":"0123.买卖股票的最佳时机III.md","path":"problems/0123.买卖股票的最佳时机III.md","contentType":"file"},{"name":"0127.单词接龙.md","path":"problems/0127.单词接龙.md","contentType":"file"},{"name":"0129.求根到叶子节点数字之和.md","path":"problems/0129.求根到叶子节点数字之和.md","contentType":"file"},{"name":"0130.被围绕的区域.md","path":"problems/0130.被围绕的区域.md","contentType":"file"},{"name":"0131.分割回文串.md","path":"problems/0131.分割回文串.md","contentType":"file"},{"name":"0132.分割回文串II.md","path":"problems/0132.分割回文串II.md","contentType":"file"},{"name":"0134.加油站.md","path":"problems/0134.加油站.md","contentType":"file"},{"name":"0135.分发糖果.md","path":"problems/0135.分发糖果.md","contentType":"file"},{"name":"0139.单词拆分.md","path":"problems/0139.单词拆分.md","contentType":"file"},{"name":"0141.环形链表.md","path":"problems/0141.环形链表.md","contentType":"file"},{"name":"0142.环形链表II.md","path":"problems/0142.环形链表II.md","contentType":"file"},{"name":"0143.重排链表.md","path":"problems/0143.重排链表.md","contentType":"file"},{"name":"0150.逆波兰表达式求值.md","path":"problems/0150.逆波兰表达式求值.md","contentType":"file"},{"name":"0151.翻转字符串里的单词.md","path":"problems/0151.翻转字符串里的单词.md","contentType":"file"},{"name":"0160.相交链表.md","path":"problems/0160.相交链表.md","contentType":"file"},{"name":"0188.买卖股票的最佳时机IV.md","path":"problems/0188.买卖股票的最佳时机IV.md","contentType":"file"},{"name":"0189.旋转数组.md","path":"problems/0189.旋转数组.md","contentType":"file"},{"name":"0198.打家劫舍.md","path":"problems/0198.打家劫舍.md","contentType":"file"},{"name":"0200.岛屿数量.广搜版.md","path":"problems/0200.岛屿数量.广搜版.md","contentType":"file"},{"name":"0200.岛屿数量.深搜版.md","path":"problems/0200.岛屿数量.深搜版.md","contentType":"file"},{"name":"0202.快乐数.md","path":"problems/0202.快乐数.md","contentType":"file"},{"name":"0203.移除链表元素.md","path":"problems/0203.移除链表元素.md","contentType":"file"},{"name":"0205.同构字符串.md","path":"problems/0205.同构字符串.md","contentType":"file"},{"name":"0206.翻转链表.md","path":"problems/0206.翻转链表.md","contentType":"file"},{"name":"0207.课程表.md","path":"problems/0207.课程表.md","contentType":"file"},{"name":"0209.长度最小的子数组.md","path":"problems/0209.长度最小的子数组.md","contentType":"file"},{"name":"0213.打家劫舍II.md","path":"problems/0213.打家劫舍II.md","contentType":"file"},{"name":"0216.组合总和III.md","path":"problems/0216.组合总和III.md","contentType":"file"},{"name":"0222.完全二叉树的节点个数.md","path":"problems/0222.完全二叉树的节点个数.md","contentType":"file"},{"name":"0225.用队列实现栈.md","path":"problems/0225.用队列实现栈.md","contentType":"file"},{"name":"0226.翻转二叉树.md","path":"problems/0226.翻转二叉树.md","contentType":"file"},{"name":"0232.用栈实现队列.md","path":"problems/0232.用栈实现队列.md","contentType":"file"},{"name":"0234.回文链表.md","path":"problems/0234.回文链表.md","contentType":"file"},{"name":"0235.二叉搜索树的最近公共祖先.md","path":"problems/0235.二叉搜索树的最近公共祖先.md","contentType":"file"},{"name":"0236.二叉树的最近公共祖先.md","path":"problems/0236.二叉树的最近公共祖先.md","contentType":"file"},{"name":"0239.滑动窗口最大值.md","path":"problems/0239.滑动窗口最大值.md","contentType":"file"},{"name":"0242.有效的字母异位词.md","path":"problems/0242.有效的字母异位词.md","contentType":"file"},{"name":"0257.二叉树的所有路径.md","path":"problems/0257.二叉树的所有路径.md","contentType":"file"},{"name":"0279.完全平方数.md","path":"problems/0279.完全平方数.md","contentType":"file"},{"name":"0283.移动零.md","path":"problems/0283.移动零.md","contentType":"file"},{"name":"0300.最长上升子序列.md","path":"problems/0300.最长上升子序列.md","contentType":"file"},{"name":"0309.最佳买卖股票时机含冷冻期.md","path":"problems/0309.最佳买卖股票时机含冷冻期.md","contentType":"file"},{"name":"0322.零钱兑换.md","path":"problems/0322.零钱兑换.md","contentType":"file"},{"name":"0332.重新安排行程.md","path":"problems/0332.重新安排行程.md","contentType":"file"},{"name":"0337.打家劫舍III.md","path":"problems/0337.打家劫舍III.md","contentType":"file"},{"name":"0343.整数拆分.md","path":"problems/0343.整数拆分.md","contentType":"file"},{"name":"0344.反转字符串.md","path":"problems/0344.反转字符串.md","contentType":"file"},{"name":"0347.前K个高频元素.md","path":"problems/0347.前K个高频元素.md","contentType":"file"},{"name":"0349.两个数组的交集.md","path":"problems/0349.两个数组的交集.md","contentType":"file"},{"name":"0376.摆动序列.md","path":"problems/0376.摆动序列.md","contentType":"file"},{"name":"0377.组合总和Ⅳ.md","path":"problems/0377.组合总和Ⅳ.md","contentType":"file"},{"name":"0383.赎金信.md","path":"problems/0383.赎金信.md","contentType":"file"},{"name":"0392.判断子序列.md","path":"problems/0392.判断子序列.md","contentType":"file"},{"name":"0404.左叶子之和.md","path":"problems/0404.左叶子之和.md","contentType":"file"},{"name":"0406.根据身高重建队列.md","path":"problems/0406.根据身高重建队列.md","contentType":"file"},{"name":"0416.分割等和子集.md","path":"problems/0416.分割等和子集.md","contentType":"file"},{"name":"0417.太平洋大西洋水流问题.md","path":"problems/0417.太平洋大西洋水流问题.md","contentType":"file"},{"name":"0435.无重叠区间.md","path":"problems/0435.无重叠区间.md","contentType":"file"},{"name":"0450.删除二叉搜索树中的节点.md","path":"problems/0450.删除二叉搜索树中的节点.md","contentType":"file"},{"name":"0452.用最少数量的箭引爆气球.md","path":"problems/0452.用最少数量的箭引爆气球.md","contentType":"file"},{"name":"0454.四数相加II.md","path":"problems/0454.四数相加II.md","contentType":"file"},{"name":"0455.分发饼干.md","path":"problems/0455.分发饼干.md","contentType":"file"},{"name":"0459.重复的子字符串.md","path":"problems/0459.重复的子字符串.md","contentType":"file"},{"name":"0463.岛屿的周长.md","path":"problems/0463.岛屿的周长.md","contentType":"file"},{"name":"0474.一和零.md","path":"problems/0474.一和零.md","contentType":"file"},{"name":"0491.递增子序列.md","path":"problems/0491.递增子序列.md","contentType":"file"},{"name":"0494.目标和.md","path":"problems/0494.目标和.md","contentType":"file"},{"name":"0496.下一个更大元素I.md","path":"problems/0496.下一个更大元素I.md","contentType":"file"},{"name":"0501.二叉搜索树中的众数.md","path":"problems/0501.二叉搜索树中的众数.md","contentType":"file"},{"name":"0503.下一个更大元素II.md","path":"problems/0503.下一个更大元素II.md","contentType":"file"},{"name":"0509.斐波那契数.md","path":"problems/0509.斐波那契数.md","contentType":"file"},{"name":"0513.找树左下角的值.md","path":"problems/0513.找树左下角的值.md","contentType":"file"},{"name":"0516.最长回文子序列.md","path":"problems/0516.最长回文子序列.md","contentType":"file"},{"name":"0518.零钱兑换II.md","path":"problems/0518.零钱兑换II.md","contentType":"file"},{"name":"0530.二叉搜索树的最小绝对差.md","path":"problems/0530.二叉搜索树的最小绝对差.md","contentType":"file"},{"name":"0538.把二叉搜索树转换为累加树.md","path":"problems/0538.把二叉搜索树转换为累加树.md","contentType":"file"},{"name":"0541.反转字符串II.md","path":"problems/0541.反转字符串II.md","contentType":"file"},{"name":"0583.两个字符串的删除操作.md","path":"problems/0583.两个字符串的删除操作.md","contentType":"file"},{"name":"0617.合并二叉树.md","path":"problems/0617.合并二叉树.md","contentType":"file"},{"name":"0647.回文子串.md","path":"problems/0647.回文子串.md","contentType":"file"},{"name":"0649.Dota2参议院.md","path":"problems/0649.Dota2参议院.md","contentType":"file"},{"name":"0654.最大二叉树.md","path":"problems/0654.最大二叉树.md","contentType":"file"},{"name":"0657.机器人能否返回原点.md","path":"problems/0657.机器人能否返回原点.md","contentType":"file"},{"name":"0669.修剪二叉搜索树.md","path":"problems/0669.修剪二叉搜索树.md","contentType":"file"},{"name":"0673.最长递增子序列的个数.md","path":"problems/0673.最长递增子序列的个数.md","contentType":"file"},{"name":"0674.最长连续递增序列.md","path":"problems/0674.最长连续递增序列.md","contentType":"file"},{"name":"0684.冗余连接.md","path":"problems/0684.冗余连接.md","contentType":"file"},{"name":"0685.冗余连接II.md","path":"problems/0685.冗余连接II.md","contentType":"file"},{"name":"0695.岛屿的最大面积.md","path":"problems/0695.岛屿的最大面积.md","contentType":"file"},{"name":"0700.二叉搜索树中的搜索.md","path":"problems/0700.二叉搜索树中的搜索.md","contentType":"file"},{"name":"0701.二叉搜索树中的插入操作.md","path":"problems/0701.二叉搜索树中的插入操作.md","contentType":"file"},{"name":"0704.二分查找.md","path":"problems/0704.二分查找.md","contentType":"file"},{"name":"0707.设计链表.md","path":"problems/0707.设计链表.md","contentType":"file"},{"name":"0714.买卖股票的最佳时机含手续费.md","path":"problems/0714.买卖股票的最佳时机含手续费.md","contentType":"file"},{"name":"0714.买卖股票的最佳时机含手续费（动态规划）.md","path":"problems/0714.买卖股票的最佳时机含手续费（动态规划）.md","contentType":"file"},{"name":"0718.最长重复子数组.md","path":"problems/0718.最长重复子数组.md","contentType":"file"},{"name":"0724.寻找数组的中心索引.md","path":"problems/0724.寻找数组的中心索引.md","contentType":"file"},{"name":"0738.单调递增的数字.md","path":"problems/0738.单调递增的数字.md","contentType":"file"},{"name":"0739.每日温度.md","path":"problems/0739.每日温度.md","contentType":"file"},{"name":"0743.网络延迟时间.md","path":"problems/0743.网络延迟时间.md","contentType":"file"},{"name":"0746.使用最小花费爬楼梯.md","path":"problems/0746.使用最小花费爬楼梯.md","contentType":"file"},{"name":"0763.划分字母区间.md","path":"problems/0763.划分字母区间.md","contentType":"file"},{"name":"0787.K站中转内最便宜的航班.md","path":"problems/0787.K站中转内最便宜的航班.md","contentType":"file"},{"name":"0797.所有可能的路径.md","path":"problems/0797.所有可能的路径.md","contentType":"file"},{"name":"0827.最大人工岛.md","path":"problems/0827.最大人工岛.md","contentType":"file"},{"name":"0841.钥匙和房间.md","path":"problems/0841.钥匙和房间.md","contentType":"file"},{"name":"0844.比较含退格的字符串.md","path":"problems/0844.比较含退格的字符串.md","contentType":"file"},{"name":"0860.柠檬水找零.md","path":"problems/0860.柠檬水找零.md","contentType":"file"},{"name":"0922.按奇偶排序数组II.md","path":"problems/0922.按奇偶排序数组II.md","contentType":"file"},{"name":"0925.长按键入.md","path":"problems/0925.长按键入.md","contentType":"file"},{"name":"0941.有效的山脉数组.md","path":"problems/0941.有效的山脉数组.md","contentType":"file"},{"name":"0968.监控二叉树.md","path":"problems/0968.监控二叉树.md","contentType":"file"},{"name":"0977.有序数组的平方.md","path":"problems/0977.有序数组的平方.md","contentType":"file"},{"name":"1002.查找常用字符.md","path":"problems/1002.查找常用字符.md","contentType":"file"},{"name":"1005.K次取反后最大化的数组和.md","path":"problems/1005.K次取反后最大化的数组和.md","contentType":"file"},{"name":"1020.飞地的数量.md","path":"problems/1020.飞地的数量.md","contentType":"file"},{"name":"1035.不相交的线.md","path":"problems/1035.不相交的线.md","contentType":"file"},{"name":"1047.删除字符串中的所有相邻重复项.md","path":"problems/1047.删除字符串中的所有相邻重复项.md","contentType":"file"},{"name":"1049.最后一块石头的重量II.md","path":"problems/1049.最后一块石头的重量II.md","contentType":"file"},{"name":"1143.最长公共子序列.md","path":"problems/1143.最长公共子序列.md","contentType":"file"},{"name":"1207.独一无二的出现次数.md","path":"problems/1207.独一无二的出现次数.md","contentType":"file"},{"name":"1221.分割平衡字符串.md","path":"problems/1221.分割平衡字符串.md","contentType":"file"},{"name":"1254.统计封闭岛屿的数目.md","path":"problems/1254.统计封闭岛屿的数目.md","contentType":"file"},{"name":"1334.阈值距离内邻居最少的城市.md","path":"problems/1334.阈值距离内邻居最少的城市.md","contentType":"file"},{"name":"1356.根据数字二进制下1的数目排序.md","path":"problems/1356.根据数字二进制下1的数目排序.md","contentType":"file"},{"name":"1365.有多少小于当前数字的数字.md","path":"problems/1365.有多少小于当前数字的数字.md","contentType":"file"},{"name":"1382.将二叉搜索树变平衡.md","path":"problems/1382.将二叉搜索树变平衡.md","contentType":"file"},{"name":"1791.找出星型图的中心节点.md","path":"problems/1791.找出星型图的中心节点.md","contentType":"file"},{"name":"1971.寻找图中是否存在路径.md","path":"problems/1971.寻找图中是否存在路径.md","contentType":"file"},{"name":"O(n)的算法居然超时了，此时的n究竟是多大？.md","path":"problems/O(n)的算法居然超时了，此时的n究竟是多大？.md","contentType":"file"},{"name":"toolgithub.sh","path":"problems/toolgithub.sh","contentType":"file"},{"name":"为了绝杀编辑距离，卡尔做了三步铺垫.md","path":"problems/为了绝杀编辑距离，卡尔做了三步铺垫.md","contentType":"file"},{"name":"二叉树中递归带着回溯.md","path":"problems/二叉树中递归带着回溯.md","contentType":"file"},{"name":"二叉树总结篇.md","path":"problems/二叉树总结篇.md","contentType":"file"},{"name":"二叉树理论基础.md","path":"problems/二叉树理论基础.md","contentType":"file"},{"name":"二叉树的统一迭代法.md","path":"problems/二叉树的统一迭代法.md","contentType":"file"},{"name":"二叉树的迭代遍历.md","path":"problems/二叉树的迭代遍历.md","contentType":"file"},{"name":"二叉树的递归遍历.md","path":"problems/二叉树的递归遍历.md","contentType":"file"},{"name":"剑指Offer05.替换空格.md","path":"problems/剑指Offer05.替换空格.md","contentType":"file"},{"name":"剑指Offer58-II.左旋转字符串.md","path":"problems/剑指Offer58-II.左旋转字符串.md","contentType":"file"},{"name":"动态规划-股票问题总结篇.md","path":"problems/动态规划-股票问题总结篇.md","contentType":"file"},{"name":"动态规划总结篇.md","path":"problems/动态规划总结篇.md","contentType":"file"},{"name":"动态规划理论基础.md","path":"problems/动态规划理论基础.md","contentType":"file"},{"name":"双指针总结.md","path":"problems/双指针总结.md","contentType":"file"},{"name":"哈希表总结.md","path":"problems/哈希表总结.md","contentType":"file"},{"name":"哈希表理论基础.md","path":"problems/哈希表理论基础.md","contentType":"file"},{"name":"回溯总结.md","path":"problems/回溯总结.md","contentType":"file"},{"name":"回溯算法去重问题的另一种写法.md","path":"problems/回溯算法去重问题的另一种写法.md","contentType":"file"},{"name":"回溯算法理论基础.md","path":"problems/回溯算法理论基础.md","contentType":"file"},{"name":"图论并查集理论基础.md","path":"problems/图论并查集理论基础.md","contentType":"file"},{"name":"图论广搜理论基础.md","path":"problems/图论广搜理论基础.md","contentType":"file"},{"name":"图论深搜理论基础.md","path":"problems/图论深搜理论基础.md","contentType":"file"},{"name":"字符串总结.md","path":"problems/字符串总结.md","contentType":"file"},{"name":"数组总结篇.md","path":"problems/数组总结篇.md","contentType":"file"},{"name":"数组理论基础.md","path":"problems/数组理论基础.md","contentType":"file"},{"name":"栈与队列总结.md","path":"problems/栈与队列总结.md","contentType":"file"},{"name":"栈与队列理论基础.md","path":"problems/栈与队列理论基础.md","contentType":"file"},{"name":"根据身高重建队列（vector原理讲解）.md","path":"problems/根据身高重建队列（vector原理讲解）.md","contentType":"file"},{"name":"算法模板.md","path":"problems/算法模板.md","contentType":"file"},{"name":"背包总结篇.md","path":"problems/背包总结篇.md","contentType":"file"},{"name":"背包理论基础01背包-1.md","path":"problems/背包理论基础01背包-1.md","contentType":"file"},{"name":"背包理论基础01背包-2.md","path":"problems/背包理论基础01背包-2.md","contentType":"file"},{"name":"背包问题理论基础多重背包.md","path":"problems/背包问题理论基础多重背包.md","contentType":"file"},{"name":"背包问题理论基础完全背包.md","path":"problems/背包问题理论基础完全背包.md","contentType":"file"},{"name":"贪心算法总结篇.md","path":"problems/贪心算法总结篇.md","contentType":"file"},{"name":"贪心算法理论基础.md","path":"problems/贪心算法理论基础.md","contentType":"file"},{"name":"链表总结篇.md","path":"problems/链表总结篇.md","contentType":"file"},{"name":"链表理论基础.md","path":"problems/链表理论基础.md","contentType":"file"},{"name":"面试题02.07.链表相交.md","path":"problems/面试题02.07.链表相交.md","contentType":"file"}],"totalCount":228},"":{"items":[{"name":"pics","path":"pics","contentType":"directory"},{"name":"problems","path":"problems","contentType":"directory"},{"name":"README.md","path":"README.md","contentType":"file"}],"totalCount":3}},"fileTreeProcessingTime":24.949736,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"master","listCacheKey":"v0:1714453598.065801","canEdit":false,"refType":"branch","currentOid":"b07e850a199dae1777d8831e9e811d87725396b4","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"problems/背包理论基础01背包-1.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/feinan/leetcode-master/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"背包理论基础01背包-1.md","displayUrl":"https://github.com/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md?raw=true","headerInfo":{"blobSize":"24.9 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"fa11fb9","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F%25E8%2583%258C%25E5%258C%2585%25E7%2590%2586%25E8%25AE%25BA%25E5%259F%25BA%25E7%25A1%258001%25E8%2583%258C%25E5%258C%2585-1.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"747","truncatedSloc":"552"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/feinan/leetcode-master/blob/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/feinan/leetcode-master/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/feinan/leetcode-master/raw/refs/heads/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["\u003cp align=\"center\"\u003e","\u003ca href=\"https://www.programmercarl.com/xunlian/xunlianying.html\" target=\"_blank\"\u003e","  \u003cimg src=\"../pics/训练营.png\" width=\"1000\"/\u003e","\u003c/a\u003e","\u003cp align=\"center\"\u003e\u003cstrong\u003e\u003ca href=\"./qita/join.md\"\u003e参与本项目\u003c/a\u003e，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！\u003c/strong\u003e\u003c/p\u003e","","","","# 动态规划：01背包理论基础","","","本题力扣上没有原题，大家可以去[卡码网第46题](https://kamacoder.com/problempage.php?pid=1046)去练习，题意是一样的。","","## 算法公开课","","**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)：[带你学透0-1背包问题！](https://www.bilibili.com/video/BV1cg411g7Y6/)，相信结合视频再看本篇题解，更有助于大家对本题的理解**。","","## 思路","","","这周我们正式开始讲解背包问题！","","背包问题的经典资料当然是：背包九讲。在公众号「代码随想录」后台回复：背包九讲，就可以获得背包九讲的pdf。","","但说实话，背包九讲对于小白来说确实不太友好，看起来还是有点费劲的，而且都是伪代码理解起来也吃力。","","对于面试的话，其实掌握01背包，和完全背包，就够用了，最多可以再来一个多重背包。","","如果这几种背包，分不清，我这里画了一个图，如下：","","![416.分割等和子集1](https://code-thinking-1253855093.file.myqcloud.com/pics/20210117171307407.png)","","","至于背包九讲其他背包，面试几乎不会问，都是竞赛级别的了，leetcode上连多重背包的题目都没有，所以题库也告诉我们，01背包和完全背包就够用了。","","而完全背包又是也是01背包稍作变化而来，即：完全背包的物品数量是无限的。","","**所以背包问题的理论基础重中之重是01背包，一定要理解透！**","","leetcode上没有纯01背包的问题，都是01背包应用方面的题目，也就是需要转化为01背包问题。","","**所以我先通过纯01背包问题，把01背包原理讲清楚，后续再讲解leetcode题目的时候，重点就是讲解如何转化为01背包问题了**。","","之前可能有些录友已经可以熟练写出背包了，但只要把这个文章仔细看完，相信你会意外收获！","","### 01 背包","","有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]，得到的价值是value[i] 。**每件物品只能用一次**，求解将哪些物品装入背包里物品价值总和最大。","","![动态规划-背包问题](https://code-thinking-1253855093.file.myqcloud.com/pics/20210117175428387.jpg)","","这是标准的背包问题，以至于很多同学看了这个自然就会想到背包，甚至都不知道暴力的解法应该怎么解了。","","这样其实是没有从底向上去思考，而是习惯性想到了背包，那么暴力的解法应该是怎么样的呢？","","每一件物品其实只有两个状态，取或者不取，所以可以使用回溯法搜索出所有的情况，那么时间复杂度就是$o(2^n)$，这里的n表示物品数量。","","**所以暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化！**","","在下面的讲解中，我举一个例子：","","背包最大重量为4。","","物品为：","","|       | 重量 | 价值 |","| ----- | ---- | ---- |","| 物品0 | 1    | 15   |","| 物品1 | 3    | 20   |","| 物品2 | 4    | 30   |","","问背包能背的物品最大价值是多少？","","以下讲解和图示中出现的数字都是以这个例子为例。","","### 二维dp数组01背包","","依然动规五部曲分析一波。","","1. 确定dp数组以及下标的含义","","对于背包问题，有一种写法， 是使用二维数组，即**dp[i][j] 表示从下标为[0-i]的物品里任意取，放进容量为j的背包，价值总和最大是多少**。","","只看这个二维数组的定义，大家一定会有点懵，看下面这个图：","","![动态规划-背包问题1](https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103003361.png)","","**要时刻记着这个dp数组的含义，下面的一些步骤都围绕这dp数组的含义进行的**，如果哪里看懵了，就来回顾一下i代表什么，j又代表什么。","","2. 确定递推公式","","再回顾一下dp[i][j]的含义：从下标为[0-i]的物品里任意取，放进容量为j的背包，价值总和最大是多少。","","那么可以有两个方向推出来dp[i][j]，","","* **不放物品i**：由dp[i - 1][j]推出，即背包容量为j，里面不放物品i的最大价值，此时dp[i][j]就是dp[i - 1][j]。(其实就是当物品i的重量大于背包j的重量时，物品i无法放进背包中，所以背包内的价值依然和前面相同。)","* **放物品i**：由dp[i - 1][j - weight[i]]推出，dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值，那么dp[i - 1][j - weight[i]] + value[i] （物品i的价值），就是背包放物品i得到的最大价值","","所以递归公式： dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);","","3. dp数组如何初始化","","**关于初始化，一定要和dp数组的定义吻合，否则到递推公式的时候就会越来越乱**。","","首先从dp[i][j]的定义出发，如果背包容量j为0的话，即dp[i][0]，无论是选取哪些物品，背包价值总和一定为0。如图：","","![动态规划-背包问题2](https://code-thinking-1253855093.file.myqcloud.com/pics/2021011010304192.png)","","在看其他情况。","","状态转移方程 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 可以看出i 是由 i-1 推导出来，那么i为0的时候就一定要初始化。","","dp[0][j]，即：i为0，存放编号0的物品的时候，各个容量的背包所能存放的最大价值。","","那么很明显当 j \u003c weight[0]的时候，dp[0][j] 应该是 0，因为背包容量比编号0的物品重量还小。","","当j \u003e= weight[0]时，dp[0][j] 应该是value[0]，因为背包容量放足够放编号0物品。","","代码初始化如下：","","```","for (int j = 0 ; j \u003c weight[0]; j++) {  // 当然这一步，如果把dp数组预先初始化为0了，这一步就可以省略，但很多同学应该没有想清楚这一点。","    dp[0][j] = 0;","}","// 正序遍历","for (int j = weight[0]; j \u003c= bagweight; j++) {","    dp[0][j] = value[0];","}","```","","","此时dp数组初始化情况如图所示：","","![动态规划-背包问题7](https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103109140.png)","","dp[0][j] 和 dp[i][0] 都已经初始化了，那么其他下标应该初始化多少呢？","","其实从递归公式： dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 可以看出dp[i][j]  是由左上方数值推导出来了，那么 其他下标初始为什么数值都可以，因为都会被覆盖。","","**初始-1，初始-2，初始100，都可以！**","","但只不过一开始就统一把dp数组统一初始为0，更方便一些。","","如图：","","![动态规划-背包问题10](https://code-thinking-1253855093.file.myqcloud.com/pics/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92-%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%9810.jpg)","","最后初始化代码如下：","","```","// 初始化 dp","vector\u003cvector\u003cint\u003e\u003e dp(weight.size(), vector\u003cint\u003e(bagweight + 1, 0));","for (int j = weight[0]; j \u003c= bagweight; j++) {","    dp[0][j] = value[0];","}","","```","","**费了这么大的功夫，才把如何初始化讲清楚，相信不少同学平时初始化dp数组是凭感觉来的，但有时候感觉是不靠谱的**。","","4. 确定遍历顺序","","","在如下图中，可以看出，有两个遍历的维度：物品与背包重量","","![动态规划-背包问题3](https://code-thinking-1253855093.file.myqcloud.com/pics/2021011010314055.png)","","那么问题来了，**先遍历 物品还是先遍历背包重量呢？**","","**其实都可以！！ 但是先遍历物品更好理解**。","","那么我先给出先遍历物品，然后遍历背包重量的代码。","","```","// weight数组的大小 就是物品个数","for(int i = 1; i \u003c weight.size(); i++) { // 遍历物品","    for(int j = 0; j \u003c= bagweight; j++) { // 遍历背包容量","        if (j \u003c weight[i]) dp[i][j] = dp[i - 1][j];","        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);","","    }","}","```","","**先遍历背包，再遍历物品，也是可以的！（注意我这里使用的二维dp数组）**","","例如这样：","","```","// weight数组的大小 就是物品个数","for(int j = 0; j \u003c= bagweight; j++) { // 遍历背包容量","    for(int i = 1; i \u003c weight.size(); i++) { // 遍历物品","        if (j \u003c weight[i]) dp[i][j] = dp[i - 1][j];","        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);","    }","}","```","","为什么也是可以的呢？","","**要理解递归的本质和递推的方向**。","","dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 递归公式中可以看出dp[i][j]是靠dp[i-1][j]和dp[i - 1][j - weight[i]]推导出来的。","","dp[i-1][j]和dp[i - 1][j - weight[i]] 都在dp[i][j]的左上角方向（包括正上方向），那么先遍历物品，再遍历背包的过程如图所示：","","![动态规划-背包问题5](https://code-thinking-1253855093.file.myqcloud.com/pics/202101101032124.png)","","再来看看先遍历背包，再遍历物品呢，如图：","","![动态规划-背包问题6](https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103244701.png)","","**大家可以看出，虽然两个for循环遍历的次序不同，但是dp[i][j]所需要的数据就是左上角，根本不影响dp[i][j]公式的推导！**","","但先遍历物品再遍历背包这个顺序更好理解。","","**其实背包问题里，两个for循环的先后循序是非常有讲究的，理解遍历顺序其实比理解推导公式难多了**。","","5. 举例推导dp数组","","来看一下对应的dp数组的数值，如图：","","![动态规划-背包问题4](https://code-thinking-1253855093.file.myqcloud.com/pics/20210118163425129.jpg)","","最终结果就是dp[2][4]。","","建议大家此时自己在纸上推导一遍，看看dp数组里每一个数值是不是这样的。","","**做动态规划的题目，最好的过程就是自己在纸上举一个例子把对应的dp数组的数值推导一下，然后在动手写代码！**","","很多同学做dp题目，遇到各种问题，然后凭感觉东改改西改改，怎么改都不对，或者稀里糊涂就改过了。","","主要就是自己没有动手推导一下dp数组的演变过程，如果推导明白了，代码写出来就算有问题，只要把dp数组打印出来，对比一下和自己推导的有什么差异，很快就可以发现问题了。","","```cpp","void test_2_wei_bag_problem1() {","    vector\u003cint\u003e weight = {1, 3, 4};","    vector\u003cint\u003e value = {15, 20, 30};","    int bagweight = 4;","","    // 二维数组","    vector\u003cvector\u003cint\u003e\u003e dp(weight.size(), vector\u003cint\u003e(bagweight + 1, 0));","","    // 初始化","    for (int j = weight[0]; j \u003c= bagweight; j++) {","        dp[0][j] = value[0];","    }","","    // weight数组的大小 就是物品个数","    for(int i = 1; i \u003c weight.size(); i++) { // 遍历物品","        for(int j = 0; j \u003c= bagweight; j++) { // 遍历背包容量","            if (j \u003c weight[i]) dp[i][j] = dp[i - 1][j];","            else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);","","        }","    }","","    cout \u003c\u003c dp[weight.size() - 1][bagweight] \u003c\u003c endl;","}","","int main() {","    test_2_wei_bag_problem1();","}","","```","","本题力扣上没有原题，大家可以去[卡码网第46题](https://kamacoder.com/problempage.php?pid=1046)去练习，题意是一样的，代码如下： ","","```CPP ","","//二维dp数组实现","#include \u003cbits/stdc++.h\u003e","using namespace std;","","int n, bagweight;// bagweight代表行李箱空间","void solve() {","    vector\u003cint\u003e weight(n, 0); // 存储每件物品所占空间","    vector\u003cint\u003e value(n, 0);  // 存储每件物品价值","    for(int i = 0; i \u003c n; ++i) {","        cin \u003e\u003e weight[i];","    }","    for(int j = 0; j \u003c n; ++j) {","        cin \u003e\u003e value[j];","    }","    // dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值","    vector\u003cvector\u003cint\u003e\u003e dp(weight.size(), vector\u003cint\u003e(bagweight + 1, 0));","","    // 初始化, 因为需要用到dp[i - 1]的值","    // j \u003c weight[0]已在上方被初始化为0","    // j \u003e= weight[0]的值就初始化为value[0]","    for (int j = weight[0]; j \u003c= bagweight; j++) {","        dp[0][j] = value[0];","    }","","    for(int i = 1; i \u003c weight.size(); i++) { // 遍历科研物品","        for(int j = 0; j \u003c= bagweight; j++) { // 遍历行李箱容量","            // 如果装不下这个物品,那么就继承dp[i - 1][j]的值","            if (j \u003c weight[i]) dp[i][j] = dp[i - 1][j];","            // 如果能装下,就将值更新为 不装这个物品的最大值 和 装这个物品的最大值 中的 最大值","            // 装这个物品的最大值由容量为j - weight[i]的包任意放入序号为[0, i - 1]的最大值 + 该物品的价值构成","            else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);","        }","    }","    cout \u003c\u003c dp[weight.size() - 1][bagweight] \u003c\u003c endl;","}","","int main() {","    while(cin \u003e\u003e n \u003e\u003e bagweight) {","        solve();","    }","    return 0;","}","","```","","","## 总结","","讲了这么多才刚刚把二维dp的01背包讲完，**这里大家其实可以发现最简单的是推导公式了，推导公式估计看一遍就记下来了，但难就难在如何初始化和遍历顺序上**。","","可能有的同学并没有注意到初始化 和 遍历顺序的重要性，我们后面做力扣上背包面试题目的时候，大家就会感受出来了。","","下一篇 还是理论基础，我们再来讲一维dp数组实现的01背包（滚动数组），分析一下和二维有什么区别，在初始化和遍历顺序上又有什么差异，敬请期待！","","","","","## 其他语言版本","","### Java","","```java","public class BagProblem {","    public static void main(String[] args) {","        int[] weight = {1,3,4};","        int[] value = {15,20,30};","        int bagSize = 4;","        testWeightBagProblem(weight,value,bagSize);","    }","","    /**","     * 动态规划获得结果","     * @param weight  物品的重量","     * @param value   物品的价值","     * @param bagSize 背包的容量","     */","    public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){","","        // 创建dp数组","        int goods = weight.length;  // 获取物品的数量","        int[][] dp = new int[goods][bagSize + 1];","","        // 初始化dp数组","        // 创建数组后，其中默认的值就是0","        for (int j = weight[0]; j \u003c= bagSize; j++) {","            dp[0][j] = value[0];","        }","","        // 填充dp数组","        for (int i = 1; i \u003c weight.length; i++) {","            for (int j = 1; j \u003c= bagSize; j++) {","                if (j \u003c weight[i]) {","                    /**","                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的","                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值","                     */","                    dp[i][j] = dp[i-1][j];","                } else {","                    /**","                     * 当前背包的容量可以放下物品i","                     * 那么此时分两种情况：","                     *    1、不放物品i","                     *    2、放物品i","                     * 比较这两种情况下，哪种背包中物品的最大价值最大","                     */","                    dp[i][j] = Math.max(dp[i-1][j] , dp[i-1][j-weight[i]] + value[i]);","                }","            }","        }","","        // 打印dp数组","        for (int i = 0; i \u003c goods; i++) {","            for (int j = 0; j \u003c= bagSize; j++) {","                System.out.print(dp[i][j] + \"\\t\");","            }","            System.out.println(\"\\n\");","        }","    }","}","","```","","```java","import java.util.Arrays;","","public class BagProblem {","    public static void main(String[] args) {","        int[] weight = {1,3,4};","        int[] value = {15,20,30};","        int bagSize = 4;","        testWeightBagProblem(weight,value,bagSize);","    }","","    /**","     * 初始化 dp 数组做了简化(给物品增加冗余维)。这样初始化dp数组，默认全为0即可。","     * dp[i][j] 表示从下标为[0 - i-1]的物品里任意取，放进容量为j的背包，价值总和最大是多少。","     * 其实是模仿背包重量从 0 开始，背包容量 j 为 0 的话，即dp[i][0]，无论是选取哪些物品，背包价值总和一定为 0。","     * 可选物品也可以从无开始，也就是没有物品可选，即dp[0][j]，这样无论背包容量为多少，背包价值总和一定为 0。","     * @param weight  物品的重量","     * @param value   物品的价值","     * @param bagSize 背包的容量","     */","    public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){","","        // 创建dp数组","        int goods = weight.length;  // 获取物品的数量","        int[][] dp = new int[goods + 1][bagSize + 1];  // 给物品增加冗余维，i = 0 表示没有物品可选","","        // 初始化dp数组，默认全为0即可","        // 填充dp数组","        for (int i = 1; i \u003c= goods; i++) {","            for (int j = 1; j \u003c= bagSize; j++) {","                if (j \u003c weight[i - 1]) {  // i - 1 对应物品 i","                    /**","                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的","                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值","                     */","                    dp[i][j] = dp[i - 1][j];","                } else {","                    /**","                     * 当前背包的容量可以放下物品i","                     * 那么此时分两种情况：","                     *    1、不放物品i","                     *    2、放物品i","                     * 比较这两种情况下，哪种背包中物品的最大价值最大","                     */","                    dp[i][j] = Math.max(dp[i - 1][j] , dp[i - 1][j - weight[i - 1]] + value[i - 1]);  // i - 1 对应物品 i","                }","            }","        }","","        // 打印dp数组","        for(int[] arr : dp){","            System.out.println(Arrays.toString(arr));","        }","    }","}","","```","","### Python","","无参数版","```python","def test_2_wei_bag_problem1():","    weight = [1, 3, 4]","    value = [15, 20, 30]","    bagweight = 4","","    # 二维数组","    dp = [[0] * (bagweight + 1) for _ in range(len(weight))]","","    # 初始化","    for j in range(weight[0], bagweight + 1):","        dp[0][j] = value[0]","","    # weight数组的大小就是物品个数","    for i in range(1, len(weight)):  # 遍历物品","        for j in range(bagweight + 1):  # 遍历背包容量","            if j \u003c weight[i]:","                dp[i][j] = dp[i - 1][j]","            else:","                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])","","    print(dp[len(weight) - 1][bagweight])","","test_2_wei_bag_problem1()","","```","有参数版","```python","def test_2_wei_bag_problem1(weight, value, bagweight):","    # 二维数组","    dp = [[0] * (bagweight + 1) for _ in range(len(weight))]","","    # 初始化","    for j in range(weight[0], bagweight + 1):","        dp[0][j] = value[0]","","    # weight数组的大小就是物品个数","    for i in range(1, len(weight)):  # 遍历物品","        for j in range(bagweight + 1):  # 遍历背包容量","            if j \u003c weight[i]:","                dp[i][j] = dp[i - 1][j]","            else:","                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])","","    return dp[len(weight) - 1][bagweight]","","if __name__ == \"__main__\":","","    weight = [1, 3, 4]","    value = [15, 20, 30]","    bagweight = 4","","    result = test_2_wei_bag_problem1(weight, value, bagweight)","    print(result)","","","```","","### Go","","```go","func test_2_wei_bag_problem1(weight, value []int, bagweight int) int {","\t// 定义dp数组","\tdp := make([][]int, len(weight))","\tfor i, _ := range dp {","\t\tdp[i] = make([]int, bagweight+1)","\t}","\t// 初始化","\tfor j := bagweight; j \u003e= weight[0]; j-- {","\t\tdp[0][j] = dp[0][j-weight[0]] + value[0]","\t}","\t// 递推公式","\tfor i := 1; i \u003c len(weight); i++ {","\t\t//正序,也可以倒序","\t    for j := 0; j \u003c= bagweight; j++ {","\t        if j \u003c weight[i] {","\t            dp[i][j] = dp[i-1][j]","\t        } else {","\t            dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i])","\t        }","\t    }","\t}","\treturn dp[len(weight)-1][bagweight]","}","","func max(a,b int) int {","\tif a \u003e b {","\t\treturn a","\t}","\treturn b","}","","func main() {","\tweight := []int{1,3,4}","\tvalue := []int{15,20,30}","\ttest_2_wei_bag_problem1(weight,value,4)","}","```","","### Javascript","","```js","function testWeightBagProblem (weight, value, size) {","    // 定义 dp 数组","    const len = weight.length,","          dp = Array(len).fill().map(() =\u003e Array(size + 1).fill(0));","","    // 初始化","    for(let j = weight[0]; j \u003c= size; j++) {","        dp[0][j] = value[0];","    }","","    // weight 数组的长度len 就是物品个数","    for(let i = 1; i \u003c len; i++) { // 遍历物品","        for(let j = 0; j \u003c= size; j++) { // 遍历背包容量","            if(j \u003c weight[i]) dp[i][j] = dp[i - 1][j];","            else dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);","        }","    }","","    console.table(dp)","","    return dp[len - 1][size];","}","","function test () {","    console.log(testWeightBagProblem([1, 3, 4, 5], [15, 20, 30, 55], 6));","}","","test();","```","","","### C","","```c","#include \u003cstdio.h\u003e","#include \u003cstdlib.h\u003e","#include \u003cstring.h\u003e","","#define MAX(a, b) (((a) \u003e (b)) ? (a) : (b))","#define ARR_SIZE(a) (sizeof((a)) / sizeof((a)[0]))","#define BAG_WEIGHT 4","","void backPack(int* weights, int weightSize, int* costs, int costSize, int bagWeight) {","    // 开辟dp数组","    int dp[weightSize][bagWeight + 1];","    memset(dp, 0, sizeof(int) * weightSize * (bagWeight + 1));","","    int i, j;","    // 当背包容量大于物品0的重量时，将物品0放入到背包中","    for(j = weights[0]; j \u003c= bagWeight; ++j) {","        dp[0][j] = costs[0];","    }","","    // 先遍历物品，再遍历重量","    for(j = 1; j \u003c= bagWeight; ++j) {","        for(i = 1; i \u003c weightSize; ++i) {","            // 如果当前背包容量小于物品重量","            if(j \u003c weights[i])","                // 背包物品的价值等于背包不放置当前物品时的价值","                dp[i][j] = dp[i-1][j];","            // 若背包当前重量可以放置物品","            else","                // 背包的价值等于放置该物品或不放置该物品的最大值","                dp[i][j] = MAX(dp[i - 1][j],  dp[i - 1][j - weights[i]] + costs[i]);","        }","    }","","    printf(\"%d\\n\", dp[weightSize - 1][bagWeight]);","}","","int main(int argc, char* argv[]) {","    int weights[] = {1, 3, 4};","    int costs[] = {15, 20, 30};","    backPack(weights, ARR_SIZE(weights), costs, ARR_SIZE(costs), BAG_WEIGHT);","    return 0;","}","```","","","### TypeScript","","```typescript","function testWeightBagProblem(","  weight: number[],","  value: number[],","  size: number","): number {","  /**","   * dp[i][j]: 前i个物品，背包容量为j，能获得的最大价值","   * dp[0][*]: u=weight[0],u之前为0，u之后（含u）为value[0]","   * dp[*][0]: 0","   * ...","   * dp[i][j]: max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]);","   */","  const goodsNum: number = weight.length;","  const dp: number[][] = new Array(goodsNum)","    .fill(0)","    .map((_) =\u003e new Array(size + 1).fill(0));","  for (let i = weight[0]; i \u003c= size; i++) {","    dp[0][i] = value[0];","  }","  for (let i = 1; i \u003c goodsNum; i++) {","    for (let j = 1; j \u003c= size; j++) {","      if (j \u003c weight[i]) {","        dp[i][j] = dp[i - 1][j];","      } else {","        dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);","      }","    }","  }","  return dp[goodsNum - 1][size];","}","// test","const weight = [1, 3, 4];","const value = [15, 20, 30];","const size = 4;","console.log(testWeightBagProblem(weight, value, size));","```","","### Scala","","```scala","object Solution {","  // 01背包","  def test_2_wei_bag_problem1(): Unit = {","    var weight = Array[Int](1, 3, 4)","    var value = Array[Int](15, 20, 30)","    var baseweight = 4","","    // 二维数组","    var dp = Array.ofDim[Int](weight.length, baseweight + 1)","","    // 初始化","    for (j \u003c- weight(0) to baseweight) {","      dp(0)(j) = value(0)","    }","","    // 遍历","    for (i \u003c- 1 until weight.length; j \u003c- 1 to baseweight) {","      if (j - weight(i) \u003e= 0) dp(i)(j) = dp(i - 1)(j - weight(i)) + value(i)","      dp(i)(j) = math.max(dp(i)(j), dp(i - 1)(j))","    }","","    // 打印数组","    dp.foreach(x =\u003e println(\"[\" + x.mkString(\",\") + \"]\"))","","    dp(weight.length - 1)(baseweight) // 最终返回","  }","","  def main(args: Array[String]): Unit = {","    test_2_wei_bag_problem1()","  }","}","```","","### Rust","","```rust","pub struct Solution;","","impl Solution {","    pub fn wei_bag_problem1(weight: Vec\u003cusize\u003e, value: Vec\u003cusize\u003e, bag_size: usize) -\u003e usize {","        let mut dp = vec![vec![0; bag_size + 1]; weight.len()];","        for j in weight[0]..=weight.len() {","            dp[0][j] = value[0];","        }","","        for i in 1..weight.len() {","            for j in 0..=bag_size {","                match j \u003c weight[i] {","                    true =\u003e dp[i][j] = dp[i - 1][j],","                    false =\u003e dp[i][j] = dp[i - 1][j].max(dp[i - 1][j - weight[i]] + value[i]),","                }","            }","        }","        dp[weight.len() - 1][bag_size]","    }","}","","#[test]","fn test_wei_bag_problem1() {","    println!(","        \"{}\",","        Solution::wei_bag_problem1(vec![1, 3, 4], vec![15, 20, 30], 4)","    );","}","```","","\u003cp align=\"center\"\u003e","\u003ca href=\"https://programmercarl.com/other/kstar.html\" target=\"_blank\"\u003e","  \u003cimg src=\"../pics/网站星球宣传海报.jpg\" width=\"1000\"/\u003e","\u003c/a\u003e"],"stylingDirectives":[[[1,2,"pl-ent"],[3,8,"pl-e"],[9,10,"pl-s"],[10,16,"pl-s"],[16,17,"pl-s"]],[[1,2,"pl-ent"],[3,7,"pl-e"],[8,9,"pl-s"],[9,64,"pl-s"],[64,65,"pl-s"],[66,72,"pl-e"],[73,74,"pl-s"],[74,80,"pl-s"],[80,81,"pl-s"]],[[3,6,"pl-ent"],[7,10,"pl-e"],[11,12,"pl-s"],[12,27,"pl-s"],[27,28,"pl-s"],[29,34,"pl-e"],[35,36,"pl-s"],[36,40,"pl-s"],[40,41,"pl-s"]],[[2,3,"pl-ent"]],[[1,2,"pl-ent"],[3,8,"pl-e"],[9,10,"pl-s"],[10,16,"pl-s"],[16,17,"pl-s"],[19,25,"pl-ent"],[27,28,"pl-ent"],[29,33,"pl-e"],[34,35,"pl-s"],[35,49,"pl-s"],[49,50,"pl-s"],[58,59,"pl-ent"],[95,101,"pl-ent"],[104,105,"pl-ent"]],[],[],[],[[0,15,"pl-mh"],[2,15,"pl-en"]],[],[],[[15,16,"pl-s"],[23,24,"pl-s"],[24,25,"pl-s"],[25,71,"pl-corl"],[71,72,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[17,18,"pl-s"],[18,19,"pl-s"],[19,66,"pl-corl"],[66,67,"pl-s"],[68,69,"pl-s"],[81,82,"pl-s"],[82,83,"pl-s"],[83,127,"pl-corl"],[127,128,"pl-s"],[154,156,"pl-s"]],[],[[0,5,"pl-mh"],[3,5,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[],[],[[0,2,"pl-s"],[13,14,"pl-s"],[14,15,"pl-s"],[15,92,"pl-corl"],[92,93,"pl-s"]],[],[],[],[],[],[],[[0,2,"pl-s"],[30,32,"pl-s"]],[],[],[],[[0,2,"pl-s"],[64,66,"pl-s"]],[],[],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[36,37,"pl-s"],[38,39,"pl-s"],[51,52,"pl-s"],[53,54,"pl-s"],[56,58,"pl-s"],[67,69,"pl-s"]],[],[[0,2,"pl-s"],[11,12,"pl-s"],[12,13,"pl-s"],[13,90,"pl-corl"],[90,91,"pl-s"]],[],[],[],[],[],[],[],[[0,2,"pl-s"],[39,41,"pl-s"]],[],[],[],[],[],[],[],[[0,1,"pl-ml"],[8,9,"pl-ml"],[13,14,"pl-ml"],[18,19,"pl-ml"]],[[0,1,"pl-ml"],[8,9,"pl-ml"],[15,16,"pl-ml"],[22,23,"pl-ml"]],[[0,1,"pl-ml"],[6,7,"pl-ml"],[13,14,"pl-ml"],[20,21,"pl-ml"]],[[0,1,"pl-ml"],[6,7,"pl-ml"],[13,14,"pl-ml"],[20,21,"pl-ml"]],[[0,1,"pl-ml"],[6,7,"pl-ml"],[13,14,"pl-ml"],[20,21,"pl-ml"]],[],[],[],[],[],[[0,14,"pl-mh"],[4,14,"pl-en"]],[],[],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[[23,25,"pl-s"],[27,28,"pl-s"],[29,30,"pl-s"],[30,31,"pl-s"],[31,32,"pl-en"],[32,33,"pl-s"],[40,41,"pl-s"],[44,45,"pl-s"],[72,74,"pl-s"]],[],[],[],[[0,2,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,91,"pl-corl"],[91,92,"pl-s"]],[],[[0,2,"pl-s"],[38,40,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[[7,8,"pl-s"],[9,10,"pl-s"],[10,11,"pl-s"],[11,12,"pl-en"],[12,13,"pl-s"],[21,22,"pl-s"],[25,26,"pl-s"]],[],[[14,15,"pl-s"],[16,17,"pl-s"],[17,18,"pl-s"],[18,19,"pl-en"],[19,20,"pl-s"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[9,11,"pl-s"],[15,16,"pl-s"],[21,22,"pl-s"],[22,23,"pl-s"],[23,24,"pl-en"],[24,25,"pl-s"],[53,54,"pl-s"],[55,56,"pl-s"],[56,57,"pl-s"],[57,58,"pl-en"],[58,59,"pl-s"],[63,64,"pl-s"],[69,70,"pl-s"],[70,71,"pl-s"],[71,72,"pl-en"],[72,73,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[8,10,"pl-s"],[14,15,"pl-s"],[20,21,"pl-s"],[21,22,"pl-s"],[32,33,"pl-s"],[34,36,"pl-s"],[41,42,"pl-s"],[47,48,"pl-s"],[48,49,"pl-s"],[59,60,"pl-s"],[61,63,"pl-s"],[80,81,"pl-s"],[82,83,"pl-s"],[101,102,"pl-s"],[107,108,"pl-s"],[108,109,"pl-s"],[119,120,"pl-s"],[121,123,"pl-s"],[131,132,"pl-s"],[133,134,"pl-s"]],[],[[10,11,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,15,"pl-en"],[15,16,"pl-s"],[25,26,"pl-s"],[31,32,"pl-s"],[32,33,"pl-s"],[33,34,"pl-en"],[34,35,"pl-s"],[39,40,"pl-s"],[45,46,"pl-s"],[46,47,"pl-s"],[57,58,"pl-s"],[59,61,"pl-s"],[69,70,"pl-s"],[71,72,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[[0,2,"pl-s"],[38,40,"pl-s"]],[],[[5,6,"pl-s"],[7,8,"pl-s"],[8,9,"pl-s"],[9,10,"pl-en"],[10,11,"pl-s"],[32,33,"pl-s"],[34,35,"pl-s"],[35,36,"pl-s"],[36,37,"pl-en"],[37,38,"pl-s"]],[],[[0,2,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,90,"pl-corl"],[90,91,"pl-s"]],[],[],[],[[9,10,"pl-s"],[11,12,"pl-s"],[12,13,"pl-s"],[13,14,"pl-en"],[14,15,"pl-s"],[24,25,"pl-s"],[30,31,"pl-s"],[31,32,"pl-s"],[32,33,"pl-en"],[33,34,"pl-s"],[38,39,"pl-s"],[44,45,"pl-s"],[45,46,"pl-s"],[56,57,"pl-s"],[58,60,"pl-s"],[68,69,"pl-s"],[70,71,"pl-s"]],[],[[2,3,"pl-s"],[4,5,"pl-s"],[5,6,"pl-s"],[6,7,"pl-en"],[7,8,"pl-s"]],[],[[17,18,"pl-s"],[19,20,"pl-s"],[26,27,"pl-s"],[28,29,"pl-s"],[29,30,"pl-s"],[30,31,"pl-en"],[31,32,"pl-s"]],[],[[12,13,"pl-s"],[14,15,"pl-s"],[19,20,"pl-s"],[21,22,"pl-s"],[22,23,"pl-s"],[23,24,"pl-en"],[24,25,"pl-s"],[34,35,"pl-s"],[36,37,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,90,"pl-c1"]],[[0,17,"pl-c1"]],[[0,1,"pl-c1"]],[[0,7,"pl-c1"]],[[0,46,"pl-c1"]],[[0,24,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[],[],[],[[0,2,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,91,"pl-corl"],[91,92,"pl-s"]],[],[[2,3,"pl-s"],[4,5,"pl-s"],[5,6,"pl-s"],[6,7,"pl-en"],[7,8,"pl-s"],[13,14,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,18,"pl-en"],[18,19,"pl-s"]],[],[[11,12,"pl-s"],[13,14,"pl-s"],[14,15,"pl-s"],[15,16,"pl-en"],[16,17,"pl-s"],[26,27,"pl-s"],[32,33,"pl-s"],[33,34,"pl-s"],[34,35,"pl-en"],[35,36,"pl-s"],[40,41,"pl-s"],[46,47,"pl-s"],[47,48,"pl-s"],[58,59,"pl-s"],[60,62,"pl-s"],[70,71,"pl-s"],[72,73,"pl-s"],[82,83,"pl-s"],[84,85,"pl-s"],[85,86,"pl-s"],[86,87,"pl-en"],[87,88,"pl-s"]],[],[[0,2,"pl-s"],[22,24,"pl-s"]],[],[],[],[],[],[[0,2,"pl-s"],[13,14,"pl-s"],[14,15,"pl-s"],[15,150,"pl-corl"],[150,151,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,9,"pl-c1"]],[[0,69,"pl-c1"]],[[0,46,"pl-c1"]],[[0,24,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,2,"pl-s"],[55,57,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[],[],[],[[0,2,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,90,"pl-corl"],[90,91,"pl-s"]],[],[[7,9,"pl-s"],[26,28,"pl-s"]],[],[[0,2,"pl-s"],[21,23,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,21,"pl-c1"]],[[0,48,"pl-c1"]],[[0,51,"pl-c1"]],[[0,51,"pl-c1"]],[[0,79,"pl-c1"]],[[0,0,"pl-c1"]],[[0,5,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,2,"pl-s"],[36,38,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,21,"pl-c1"]],[[0,47,"pl-c1"]],[[0,52,"pl-c1"]],[[0,51,"pl-c1"]],[[0,79,"pl-c1"]],[[0,5,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[],[],[[0,2,"pl-s"],[16,18,"pl-s"]],[],[[2,3,"pl-s"],[4,5,"pl-s"],[5,6,"pl-s"],[6,7,"pl-en"],[7,8,"pl-s"],[17,18,"pl-s"],[23,24,"pl-s"],[24,25,"pl-s"],[25,26,"pl-en"],[26,27,"pl-s"],[31,32,"pl-s"],[37,38,"pl-s"],[38,39,"pl-s"],[49,50,"pl-s"],[51,53,"pl-s"],[61,62,"pl-s"],[63,64,"pl-s"],[78,79,"pl-s"],[80,81,"pl-s"],[81,82,"pl-s"],[82,83,"pl-en"],[83,84,"pl-s"],[88,89,"pl-s"],[92,93,"pl-s"],[93,94,"pl-s"],[94,95,"pl-en"],[95,96,"pl-s"],[99,100,"pl-s"],[105,106,"pl-s"],[106,107,"pl-s"],[117,118,"pl-s"],[119,121,"pl-s"]],[],[[2,3,"pl-s"],[6,7,"pl-s"],[7,8,"pl-s"],[8,9,"pl-en"],[9,10,"pl-s"],[13,14,"pl-s"],[19,20,"pl-s"],[20,21,"pl-s"],[31,32,"pl-s"],[33,35,"pl-s"],[40,41,"pl-s"],[42,43,"pl-s"],[43,44,"pl-s"],[44,45,"pl-en"],[45,46,"pl-s"]],[],[[0,2,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,89,"pl-corl"],[89,90,"pl-s"]],[],[],[],[[0,2,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,91,"pl-corl"],[91,92,"pl-s"]],[],[[0,2,"pl-s"],[30,31,"pl-s"],[32,33,"pl-s"],[33,34,"pl-s"],[34,35,"pl-en"],[35,36,"pl-s"],[55,56,"pl-s"],[57,58,"pl-s"],[58,59,"pl-s"],[59,60,"pl-en"],[60,61,"pl-s"],[67,69,"pl-s"]],[],[],[],[[0,2,"pl-s"],[48,50,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[],[],[[0,2,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,91,"pl-corl"],[91,92,"pl-s"]],[],[[8,9,"pl-s"],[10,11,"pl-s"],[11,12,"pl-s"],[12,13,"pl-en"],[13,14,"pl-s"]],[],[],[],[[0,2,"pl-s"],[53,55,"pl-s"]],[],[],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,4,"pl-k"],[5,28,"pl-en"]],[[4,35,"pl-c1"]],[[4,37,"pl-c1"]],[[4,22,"pl-c1"]],[],[[4,11,"pl-c1"]],[[4,73,"pl-c1"]],[],[[4,10,"pl-c1"]],[[4,50,"pl-c1"]],[[4,28,"pl-c1"]],[[4,5,"pl-c1"]],[],[[4,25,"pl-c1"]],[[4,52,"pl-c1"]],[[4,55,"pl-c1"]],[[4,55,"pl-c1"]],[[4,83,"pl-c1"]],[],[[4,9,"pl-c1"]],[[4,5,"pl-c1"]],[],[[4,53,"pl-c1"]],[],[],[[0,3,"pl-k"],[4,8,"pl-en"]],[[4,27,"pl-c1"]],[],[],[[0,3,"pl-s"]],[],[[15,16,"pl-s"],[23,24,"pl-s"],[24,25,"pl-s"],[25,71,"pl-corl"],[71,72,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[],[[0,10,"pl-c"],[0,2,"pl-c"]],[[1,8,"pl-k"],[9,24,"pl-s"],[9,10,"pl-pds"],[23,24,"pl-pds"]],[[0,5,"pl-k"],[6,15,"pl-k"],[16,19,"pl-en"],[19,20,"pl-k"]],[],[[0,3,"pl-k"],[17,36,"pl-c"],[17,19,"pl-c"]],[[0,4,"pl-k"],[5,10,"pl-en"]],[[4,43,"pl-c1"]],[[4,41,"pl-c1"]],[[4,32,"pl-c1"]],[[4,25,"pl-c1"]],[[4,5,"pl-c1"]],[[4,32,"pl-c1"]],[[4,24,"pl-c1"]],[[4,5,"pl-c1"]],[[4,62,"pl-c1"]],[[4,73,"pl-c1"]],[],[[4,29,"pl-c1"]],[[4,30,"pl-c1"]],[[4,36,"pl-c1"]],[[4,50,"pl-c1"]],[[4,28,"pl-c1"]],[[4,5,"pl-c1"]],[],[[4,54,"pl-c1"]],[[4,56,"pl-c1"]],[[4,44,"pl-c1"]],[[4,55,"pl-c1"]],[[4,57,"pl-c1"]],[[4,75,"pl-c1"]],[[4,83,"pl-c1"]],[[4,9,"pl-c1"]],[[4,5,"pl-c1"]],[[4,53,"pl-c1"]],[],[],[[0,3,"pl-k"],[4,8,"pl-en"]],[[4,34,"pl-c1"]],[[8,13,"pl-c1"]],[],[],[],[],[[0,3,"pl-s"]],[],[],[[0,5,"pl-mh"],[3,5,"pl-en"]],[],[[21,23,"pl-s"],[75,77,"pl-s"]],[],[],[],[],[],[],[],[],[[0,9,"pl-mh"],[3,9,"pl-en"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,23,"pl-en"]],[[4,10,"pl-k"],[11,17,"pl-k"],[18,22,"pl-k"],[23,27,"pl-en"],[28,34,"pl-k"],[37,41,"pl-v"]],[[8,11,"pl-k"],[21,22,"pl-k"],[24,25,"pl-c1"],[26,27,"pl-c1"],[28,29,"pl-c1"]],[[8,11,"pl-k"],[20,21,"pl-k"],[23,25,"pl-c1"],[26,28,"pl-c1"],[29,31,"pl-c1"]],[[8,11,"pl-k"],[20,21,"pl-k"],[22,23,"pl-c1"]],[],[],[],[[4,7,"pl-c"],[4,7,"pl-c"]],[[0,15,"pl-c"]],[[0,27,"pl-c"],[7,13,"pl-k"]],[[0,27,"pl-c"],[7,13,"pl-k"]],[[0,27,"pl-c"],[7,13,"pl-k"]],[[0,7,"pl-c"],[5,7,"pl-c"]],[[4,10,"pl-k"],[11,17,"pl-k"],[18,22,"pl-k"],[23,43,"pl-en"],[44,47,"pl-k"],[50,56,"pl-v"],[58,61,"pl-k"],[64,69,"pl-v"],[71,74,"pl-k"],[75,82,"pl-v"]],[],[[8,17,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[18,19,"pl-k"],[26,27,"pl-k"],[36,46,"pl-c"],[36,38,"pl-c"]],[[8,11,"pl-k"],[19,20,"pl-k"],[21,24,"pl-k"],[25,28,"pl-smi"],[44,45,"pl-k"],[46,47,"pl-c1"]],[],[[8,18,"pl-c"],[8,10,"pl-c"]],[[8,26,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[13,16,"pl-k"],[19,20,"pl-k"],[28,29,"pl-c1"],[34,36,"pl-k"],[47,49,"pl-k"]],[[15,16,"pl-c1"],[21,22,"pl-k"],[29,30,"pl-c1"]],[],[],[[8,17,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[13,16,"pl-k"],[19,20,"pl-k"],[21,22,"pl-c1"],[26,27,"pl-k"],[34,35,"pl-k"],[44,46,"pl-k"]],[[12,15,"pl-k"],[17,20,"pl-k"],[23,24,"pl-k"],[25,26,"pl-c1"],[30,32,"pl-k"],[43,45,"pl-k"]],[[16,18,"pl-k"],[22,23,"pl-k"]],[[20,23,"pl-c"],[20,23,"pl-c"]],[[0,50,"pl-c"]],[[0,51,"pl-c"]],[[0,23,"pl-c"],[21,23,"pl-c"]],[[29,30,"pl-k"],[35,36,"pl-k"],[36,37,"pl-c1"]],[[18,22,"pl-k"]],[[20,23,"pl-c"],[20,23,"pl-c"]],[[0,37,"pl-c"]],[[0,33,"pl-c"]],[[0,33,"pl-c"]],[[0,32,"pl-c"]],[[0,46,"pl-c"]],[[0,23,"pl-c"],[21,23,"pl-c"]],[[29,30,"pl-k"],[31,35,"pl-smi"],[35,36,"pl-k"],[44,45,"pl-k"],[45,46,"pl-c1"],[57,58,"pl-k"],[58,59,"pl-c1"],[62,63,"pl-k"],[74,75,"pl-k"]],[],[],[],[],[[8,17,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[13,16,"pl-k"],[19,20,"pl-k"],[21,22,"pl-c1"],[26,27,"pl-k"],[36,38,"pl-k"]],[[12,15,"pl-k"],[17,20,"pl-k"],[23,24,"pl-k"],[25,26,"pl-c1"],[30,32,"pl-k"],[43,45,"pl-k"]],[[16,22,"pl-smi"],[22,23,"pl-k"],[26,27,"pl-k"],[42,43,"pl-k"],[44,48,"pl-s"],[44,45,"pl-pds"],[45,47,"pl-cce"],[47,48,"pl-pds"]],[],[[12,18,"pl-smi"],[18,19,"pl-k"],[22,23,"pl-k"],[31,35,"pl-s"],[31,32,"pl-pds"],[32,34,"pl-cce"],[34,35,"pl-pds"]],[],[],[],[],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,6,"pl-k"],[7,23,"pl-smi"]],[],[[0,6,"pl-k"],[7,12,"pl-k"],[13,23,"pl-en"]],[[4,10,"pl-k"],[11,17,"pl-k"],[18,22,"pl-k"],[23,27,"pl-en"],[28,34,"pl-k"],[37,41,"pl-v"]],[[8,11,"pl-k"],[21,22,"pl-k"],[24,25,"pl-c1"],[26,27,"pl-c1"],[28,29,"pl-c1"]],[[8,11,"pl-k"],[20,21,"pl-k"],[23,25,"pl-c1"],[26,28,"pl-c1"],[29,31,"pl-c1"]],[[8,11,"pl-k"],[20,21,"pl-k"],[22,23,"pl-c1"]],[],[],[],[[4,7,"pl-c"],[4,7,"pl-c"]],[[0,49,"pl-c"]],[[0,59,"pl-c"]],[[0,69,"pl-c"]],[[0,63,"pl-c"]],[[0,27,"pl-c"],[7,13,"pl-k"]],[[0,27,"pl-c"],[7,13,"pl-k"]],[[0,27,"pl-c"],[7,13,"pl-k"]],[[0,7,"pl-c"],[5,7,"pl-c"]],[[4,10,"pl-k"],[11,17,"pl-k"],[18,22,"pl-k"],[23,43,"pl-en"],[44,47,"pl-k"],[50,56,"pl-v"],[58,61,"pl-k"],[64,69,"pl-v"],[71,74,"pl-k"],[75,82,"pl-v"]],[],[[8,17,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[18,19,"pl-k"],[26,27,"pl-k"],[36,46,"pl-c"],[36,38,"pl-c"]],[[8,11,"pl-k"],[19,20,"pl-k"],[21,24,"pl-k"],[25,28,"pl-smi"],[35,36,"pl-k"],[37,38,"pl-c1"],[48,49,"pl-k"],[50,51,"pl-c1"],[55,81,"pl-c"],[55,57,"pl-c"]],[],[[8,26,"pl-c"],[8,10,"pl-c"]],[[8,17,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[13,16,"pl-k"],[19,20,"pl-k"],[21,22,"pl-c1"],[26,28,"pl-k"],[37,39,"pl-k"]],[[12,15,"pl-k"],[17,20,"pl-k"],[23,24,"pl-k"],[25,26,"pl-c1"],[30,32,"pl-k"],[43,45,"pl-k"]],[[16,18,"pl-k"],[22,23,"pl-k"],[33,34,"pl-k"],[35,36,"pl-c1"],[42,57,"pl-c"],[42,44,"pl-c"]],[[20,23,"pl-c"],[20,23,"pl-c"]],[[0,50,"pl-c"]],[[0,51,"pl-c"]],[[0,23,"pl-c"],[21,23,"pl-c"]],[[29,30,"pl-k"],[36,37,"pl-k"],[38,39,"pl-c1"]],[[18,22,"pl-k"]],[[20,23,"pl-c"],[20,23,"pl-c"]],[[0,37,"pl-c"]],[[0,33,"pl-c"]],[[0,33,"pl-c"]],[[0,32,"pl-c"]],[[0,46,"pl-c"]],[[0,23,"pl-c"],[21,23,"pl-c"]],[[29,30,"pl-k"],[31,35,"pl-smi"],[35,36,"pl-k"],[45,46,"pl-k"],[47,48,"pl-c1"],[60,61,"pl-k"],[62,63,"pl-c1"],[67,68,"pl-k"],[78,79,"pl-k"],[80,81,"pl-c1"],[84,85,"pl-k"],[94,95,"pl-k"],[96,97,"pl-c1"],[102,117,"pl-c"],[102,104,"pl-c"]],[],[],[],[],[[8,17,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[12,15,"pl-k"],[22,23,"pl-k"]],[[12,18,"pl-smi"],[18,19,"pl-k"],[22,23,"pl-k"],[31,37,"pl-smi"],[37,38,"pl-k"]],[],[],[],[],[[0,3,"pl-s"]],[],[[0,10,"pl-mh"],[4,10,"pl-en"]],[],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,3,"pl-k"],[4,27,"pl-en"]],[[11,12,"pl-k"],[14,15,"pl-c1"],[17,18,"pl-c1"],[20,21,"pl-c1"]],[[10,11,"pl-k"],[13,15,"pl-c1"],[17,19,"pl-c1"],[21,23,"pl-c1"]],[[14,15,"pl-k"],[16,17,"pl-c1"]],[],[[4,10,"pl-c"],[4,5,"pl-c"]],[[7,8,"pl-k"],[11,12,"pl-c1"],[14,15,"pl-k"],[27,28,"pl-k"],[29,30,"pl-c1"],[32,35,"pl-k"],[38,40,"pl-k"],[41,46,"pl-c1"],[47,50,"pl-c1"]],[],[[4,9,"pl-c"],[4,5,"pl-c"]],[[4,7,"pl-k"],[10,12,"pl-k"],[13,18,"pl-c1"],[26,27,"pl-c1"],[40,41,"pl-k"],[42,43,"pl-c1"]],[[11,12,"pl-c1"],[17,18,"pl-k"],[25,26,"pl-c1"]],[],[[4,23,"pl-c"],[4,5,"pl-c"]],[[4,7,"pl-k"],[10,12,"pl-k"],[13,18,"pl-c1"],[19,20,"pl-c1"],[22,25,"pl-c1"],[37,43,"pl-c"],[37,38,"pl-c"]],[[8,11,"pl-k"],[14,16,"pl-k"],[17,22,"pl-c1"],[33,34,"pl-k"],[35,36,"pl-c1"],[40,48,"pl-c"],[40,41,"pl-c"]],[[12,14,"pl-k"],[17,18,"pl-k"]],[[25,26,"pl-k"],[32,33,"pl-k"],[34,35,"pl-c1"]],[[12,16,"pl-k"]],[[25,26,"pl-k"],[27,30,"pl-c1"],[36,37,"pl-k"],[38,39,"pl-c1"],[50,51,"pl-k"],[52,53,"pl-c1"],[57,58,"pl-k"],[70,71,"pl-k"]],[],[[4,9,"pl-c1"],[13,16,"pl-c1"],[25,26,"pl-k"],[27,28,"pl-c1"]],[],[],[],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,3,"pl-k"],[4,27,"pl-en"],[28,34,"pl-smi"],[36,41,"pl-smi"],[43,52,"pl-smi"]],[[4,10,"pl-c"],[4,5,"pl-c"]],[[7,8,"pl-k"],[11,12,"pl-c1"],[14,15,"pl-k"],[27,28,"pl-k"],[29,30,"pl-c1"],[32,35,"pl-k"],[38,40,"pl-k"],[41,46,"pl-c1"],[47,50,"pl-c1"]],[],[[4,9,"pl-c"],[4,5,"pl-c"]],[[4,7,"pl-k"],[10,12,"pl-k"],[13,18,"pl-c1"],[26,27,"pl-c1"],[40,41,"pl-k"],[42,43,"pl-c1"]],[[11,12,"pl-c1"],[17,18,"pl-k"],[25,26,"pl-c1"]],[],[[4,23,"pl-c"],[4,5,"pl-c"]],[[4,7,"pl-k"],[10,12,"pl-k"],[13,18,"pl-c1"],[19,20,"pl-c1"],[22,25,"pl-c1"],[37,43,"pl-c"],[37,38,"pl-c"]],[[8,11,"pl-k"],[14,16,"pl-k"],[17,22,"pl-c1"],[33,34,"pl-k"],[35,36,"pl-c1"],[40,48,"pl-c"],[40,41,"pl-c"]],[[12,14,"pl-k"],[17,18,"pl-k"]],[[25,26,"pl-k"],[32,33,"pl-k"],[34,35,"pl-c1"]],[[12,16,"pl-k"]],[[25,26,"pl-k"],[27,30,"pl-c1"],[36,37,"pl-k"],[38,39,"pl-c1"],[50,51,"pl-k"],[52,53,"pl-c1"],[57,58,"pl-k"],[70,71,"pl-k"]],[],[[4,10,"pl-k"],[14,17,"pl-c1"],[26,27,"pl-k"],[28,29,"pl-c1"]],[],[[0,2,"pl-k"],[3,11,"pl-c1"],[12,14,"pl-k"],[15,25,"pl-s"],[15,16,"pl-pds"],[24,25,"pl-pds"]],[],[[11,12,"pl-k"],[14,15,"pl-c1"],[17,18,"pl-c1"],[20,21,"pl-c1"]],[[10,11,"pl-k"],[13,15,"pl-c1"],[17,19,"pl-c1"],[21,23,"pl-c1"]],[[14,15,"pl-k"],[16,17,"pl-c1"]],[],[[11,12,"pl-k"]],[[4,9,"pl-c1"]],[],[],[[0,3,"pl-s"]],[],[[0,6,"pl-mh"],[4,6,"pl-en"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,4,"pl-k"],[5,28,"pl-en"],[29,35,"pl-v"],[37,42,"pl-v"],[45,48,"pl-v"],[50,59,"pl-v"],[60,63,"pl-v"],[65,68,"pl-v"]],[[1,10,"pl-c"],[1,3,"pl-c"]],[[1,3,"pl-smi"],[4,6,"pl-k"],[7,11,"pl-c1"],[16,19,"pl-k"],[21,24,"pl-c1"]],[[1,4,"pl-k"],[5,6,"pl-smi"],[8,9,"pl-smi"],[10,12,"pl-k"],[13,18,"pl-k"]],[[10,14,"pl-c1"],[17,20,"pl-k"],[32,33,"pl-c1"]],[],[[1,7,"pl-c"],[1,3,"pl-c"]],[[1,4,"pl-k"],[5,6,"pl-smi"],[7,9,"pl-k"],[33,34,"pl-c1"]],[[5,6,"pl-c1"],[16,17,"pl-c1"],[28,29,"pl-c1"],[40,41,"pl-c1"]],[],[[1,8,"pl-c"],[1,3,"pl-c"]],[[1,4,"pl-k"],[5,6,"pl-smi"],[7,9,"pl-k"],[10,11,"pl-c1"],[17,20,"pl-c1"]],[[2,12,"pl-c"],[2,4,"pl-c"]],[[5,8,"pl-k"],[9,10,"pl-smi"],[11,13,"pl-k"],[14,15,"pl-c1"]],[[9,11,"pl-k"]],[[29,30,"pl-c1"]],[[11,15,"pl-k"]],[[24,27,"pl-c1"],[33,34,"pl-c1"],[45,46,"pl-c1"]],[],[],[],[[1,7,"pl-k"],[11,14,"pl-c1"],[23,24,"pl-c1"]],[],[],[[0,4,"pl-k"],[5,8,"pl-en"],[9,10,"pl-v"],[11,12,"pl-v"],[13,16,"pl-v"],[18,21,"pl-v"]],[[1,3,"pl-k"]],[[2,8,"pl-k"]],[],[[1,7,"pl-k"]],[],[],[[0,4,"pl-k"],[5,9,"pl-en"]],[[1,7,"pl-smi"],[8,10,"pl-k"],[13,16,"pl-k"],[17,18,"pl-c1"],[19,20,"pl-c1"],[21,22,"pl-c1"]],[[1,6,"pl-smi"],[7,9,"pl-k"],[12,15,"pl-k"],[16,18,"pl-c1"],[19,21,"pl-c1"],[22,24,"pl-c1"]],[[1,24,"pl-c1"],[38,39,"pl-c1"]],[],[[0,3,"pl-s"]],[],[[0,14,"pl-mh"],[4,14,"pl-en"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,8,"pl-k"],[9,29,"pl-en"],[31,37,"pl-smi"],[39,44,"pl-smi"],[46,50,"pl-smi"]],[[4,15,"pl-c"],[4,6,"pl-c"]],[[4,9,"pl-k"],[10,13,"pl-c1"],[14,15,"pl-k"],[16,22,"pl-smi"],[23,29,"pl-c1"]],[[13,14,"pl-k"],[15,20,"pl-c1"],[26,30,"pl-en"],[33,36,"pl-en"],[40,42,"pl-k"],[43,48,"pl-c1"],[54,55,"pl-k"],[56,57,"pl-c1"],[59,63,"pl-en"],[64,65,"pl-c1"]],[],[[4,10,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[8,11,"pl-k"],[14,15,"pl-k"],[23,24,"pl-c1"],[29,31,"pl-k"],[39,41,"pl-k"]],[[11,12,"pl-c1"],[17,18,"pl-k"],[25,26,"pl-c1"]],[],[],[[4,29,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[8,11,"pl-k"],[14,15,"pl-k"],[16,17,"pl-c1"],[21,22,"pl-k"],[29,31,"pl-k"],[35,42,"pl-c"],[35,37,"pl-c"]],[[8,11,"pl-k"],[12,15,"pl-k"],[18,19,"pl-k"],[20,21,"pl-c1"],[25,27,"pl-k"],[35,37,"pl-k"],[41,50,"pl-c"],[41,43,"pl-c"]],[[12,14,"pl-k"],[17,18,"pl-k"],[39,40,"pl-k"],[46,47,"pl-k"],[48,49,"pl-c1"]],[[12,16,"pl-k"],[26,27,"pl-k"],[28,32,"pl-c1"],[33,36,"pl-c1"],[42,43,"pl-k"],[44,45,"pl-c1"],[56,57,"pl-k"],[58,59,"pl-c1"],[63,64,"pl-k"],[76,77,"pl-k"]],[],[],[],[[4,11,"pl-en"],[12,17,"pl-en"]],[],[[4,10,"pl-k"],[18,19,"pl-k"],[20,21,"pl-c1"]],[],[],[[0,8,"pl-k"],[9,13,"pl-en"]],[[4,11,"pl-en"],[12,15,"pl-c1"],[16,36,"pl-en"],[38,39,"pl-c1"],[41,42,"pl-c1"],[44,45,"pl-c1"],[47,48,"pl-c1"],[52,54,"pl-c1"],[56,58,"pl-c1"],[60,62,"pl-c1"],[64,66,"pl-c1"],[69,70,"pl-c1"]],[],[],[[0,4,"pl-en"]],[[0,3,"pl-s"]],[],[],[[0,5,"pl-mh"],[4,5,"pl-en"]],[],[[0,3,"pl-s"],[3,4,"pl-en"]],[[1,8,"pl-k"],[9,18,"pl-s"],[9,10,"pl-pds"],[17,18,"pl-pds"]],[[1,8,"pl-k"],[9,19,"pl-s"],[9,10,"pl-pds"],[18,19,"pl-pds"]],[[1,8,"pl-k"],[9,19,"pl-s"],[9,10,"pl-pds"],[18,19,"pl-pds"]],[],[[1,7,"pl-k"],[8,11,"pl-en"],[12,16,"pl-v"]],[[45,46,"pl-s"],[47,48,"pl-s"]],[],[],[[0,4,"pl-k"],[5,13,"pl-en"],[17,18,"pl-s"],[47,48,"pl-s"]],[],[[10,11,"pl-s"],[21,22,"pl-s"],[22,23,"pl-s"],[23,36,"pl-en"],[36,37,"pl-s"]],[],[],[[4,13,"pl-c1"]],[[4,32,"pl-c1"]],[[4,46,"pl-c1"]],[[4,28,"pl-c1"]],[[4,5,"pl-c1"]],[],[[4,18,"pl-c1"]],[[4,37,"pl-c1"]],[[4,41,"pl-c1"]],[[4,29,"pl-c1"]],[[4,30,"pl-c1"]],[[4,41,"pl-c1"]],[[4,38,"pl-c1"]],[[4,28,"pl-c1"]],[[4,16,"pl-c1"]],[[4,42,"pl-c1"]],[[4,84,"pl-c1"]],[[4,9,"pl-c1"]],[[4,5,"pl-c1"]],[],[[4,50,"pl-c1"]],[],[],[[23,24,"pl-s"],[29,30,"pl-s"],[30,31,"pl-s"]],[[15,16,"pl-s"],[16,17,"pl-s"]],[[13,14,"pl-s"],[14,15,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,0,"pl-c1"]],[[0,0,"pl-c1"]],[[0,14,"pl-c1"]],[[0,0,"pl-c1"]],[[0,13,"pl-c1"]],[[0,30,"pl-c1"]],[[0,19,"pl-c1"]],[[0,18,"pl-c1"]],[[0,14,"pl-c1"]],[[0,11,"pl-c1"]],[[0,5,"pl-c1"]],[[0,36,"pl-c1"]],[[0,49,"pl-c1"]],[[0,16,"pl-c1"]],[[0,8,"pl-c1"]],[[0,62,"pl-c1"]],[[0,5,"pl-c1"]],[[0,41,"pl-c1"]],[[0,44,"pl-c1"]],[[0,12,"pl-c1"]],[[0,45,"pl-c1"]],[[0,43,"pl-c1"]],[[0,24,"pl-c1"]],[[0,3,"pl-c1"]],[[0,38,"pl-c1"]],[[0,37,"pl-c1"]],[[0,26,"pl-c1"]],[[0,32,"pl-c1"]],[[0,14,"pl-c1"]],[[0,79,"pl-c1"]],[[0,7,"pl-c1"]],[[0,5,"pl-c1"]],[[0,3,"pl-c1"]],[[0,32,"pl-c1"]],[[0,1,"pl-c1"]],[[0,7,"pl-c1"]],[[0,25,"pl-c1"]],[[0,27,"pl-c1"]],[[0,15,"pl-c1"]],[[0,55,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,6,"pl-k"],[7,15,"pl-en"]],[[2,9,"pl-c"],[2,4,"pl-c"]],[[2,5,"pl-k"],[6,29,"pl-en"],[31,32,"pl-k"],[33,37,"pl-en"],[38,39,"pl-k"]],[[4,7,"pl-k"],[8,14,"pl-v"],[15,16,"pl-k"],[17,22,"pl-en"],[23,26,"pl-en"],[28,29,"pl-c1"],[31,32,"pl-c1"],[34,35,"pl-c1"]],[[4,7,"pl-k"],[8,13,"pl-v"],[14,15,"pl-k"],[16,21,"pl-en"],[22,25,"pl-en"],[27,29,"pl-c1"],[31,33,"pl-c1"],[35,37,"pl-c1"]],[[4,7,"pl-k"],[8,18,"pl-v"],[19,20,"pl-k"],[21,22,"pl-c1"]],[],[[4,11,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[8,10,"pl-v"],[11,12,"pl-k"],[13,18,"pl-en"],[25,28,"pl-en"],[56,57,"pl-k"],[58,59,"pl-c1"]],[],[[4,10,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[11,13,"pl-k"],[21,22,"pl-c1"]],[[9,10,"pl-c1"],[15,16,"pl-k"],[23,24,"pl-c1"]],[],[],[[4,9,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[11,13,"pl-k"],[14,15,"pl-c1"],[39,41,"pl-k"],[42,43,"pl-c1"]],[[6,8,"pl-k"],[12,13,"pl-k"],[24,26,"pl-k"],[27,28,"pl-c1"],[39,40,"pl-k"],[46,47,"pl-k"],[48,49,"pl-c1"],[53,54,"pl-k"],[66,67,"pl-k"]],[[15,16,"pl-k"],[41,42,"pl-k"],[43,44,"pl-c1"]],[],[],[[4,11,"pl-c"],[4,6,"pl-c"]],[[17,19,"pl-k"],[28,31,"pl-s"],[28,29,"pl-pds"],[30,31,"pl-pds"],[32,33,"pl-k"],[45,48,"pl-s"],[45,46,"pl-pds"],[47,48,"pl-pds"],[50,51,"pl-k"],[52,55,"pl-s"],[52,53,"pl-pds"],[54,55,"pl-pds"]],[],[[21,22,"pl-k"],[23,24,"pl-c1"],[38,45,"pl-c"],[38,40,"pl-c"]],[],[],[[2,5,"pl-k"],[6,10,"pl-en"],[11,15,"pl-v"],[17,22,"pl-en"],[23,29,"pl-en"],[31,32,"pl-k"],[33,37,"pl-en"],[38,39,"pl-k"]],[],[],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,3,"pl-k"],[4,10,"pl-k"],[11,19,"pl-en"]],[],[[0,4,"pl-k"],[5,13,"pl-en"]],[[4,7,"pl-k"],[8,10,"pl-k"],[11,27,"pl-en"],[28,34,"pl-smi"],[34,35,"pl-k"],[36,39,"pl-en"],[40,45,"pl-k"],[48,53,"pl-smi"],[53,54,"pl-k"],[55,58,"pl-en"],[59,64,"pl-k"],[67,75,"pl-smi"],[75,76,"pl-k"],[77,82,"pl-k"],[84,86,"pl-k"],[87,92,"pl-k"]],[[8,11,"pl-k"],[12,15,"pl-k"],[16,18,"pl-smi"],[19,20,"pl-k"],[21,25,"pl-en"],[26,30,"pl-en"],[31,32,"pl-c1"],[34,42,"pl-smi"],[43,44,"pl-k"],[45,46,"pl-c1"],[49,55,"pl-smi"],[55,56,"pl-k"],[56,59,"pl-en"]],[[8,11,"pl-k"],[12,13,"pl-smi"],[14,16,"pl-k"],[17,23,"pl-smi"],[24,25,"pl-c1"],[26,29,"pl-k"],[29,35,"pl-smi"],[35,36,"pl-k"],[36,39,"pl-en"]],[[12,14,"pl-smi"],[15,16,"pl-c1"],[18,19,"pl-smi"],[21,22,"pl-k"],[23,28,"pl-smi"],[29,30,"pl-c1"]],[],[],[[8,11,"pl-k"],[12,13,"pl-smi"],[14,16,"pl-k"],[17,18,"pl-c1"],[18,20,"pl-k"],[20,26,"pl-smi"],[26,27,"pl-k"],[27,30,"pl-en"]],[[12,15,"pl-k"],[16,17,"pl-smi"],[18,20,"pl-k"],[21,22,"pl-c1"],[22,25,"pl-k"],[25,33,"pl-smi"]],[[16,21,"pl-k"],[22,23,"pl-smi"],[24,25,"pl-k"],[26,32,"pl-smi"],[33,34,"pl-smi"]],[[20,24,"pl-c1"],[25,27,"pl-k"],[28,30,"pl-smi"],[31,32,"pl-smi"],[34,35,"pl-smi"],[37,38,"pl-k"],[39,41,"pl-smi"],[42,43,"pl-smi"],[44,45,"pl-k"],[46,47,"pl-c1"],[49,50,"pl-smi"]],[[20,25,"pl-c1"],[26,28,"pl-k"],[29,31,"pl-smi"],[32,33,"pl-smi"],[35,36,"pl-smi"],[38,39,"pl-k"],[40,42,"pl-smi"],[43,44,"pl-smi"],[45,46,"pl-k"],[47,48,"pl-c1"],[50,51,"pl-smi"],[52,53,"pl-k"],[53,56,"pl-en"],[57,59,"pl-smi"],[60,61,"pl-smi"],[62,63,"pl-k"],[64,65,"pl-c1"],[67,68,"pl-smi"],[69,70,"pl-k"],[71,77,"pl-smi"],[78,79,"pl-smi"],[82,83,"pl-k"],[84,89,"pl-smi"],[90,91,"pl-smi"]],[],[],[],[[8,10,"pl-smi"],[11,17,"pl-smi"],[17,18,"pl-k"],[18,21,"pl-en"],[24,25,"pl-k"],[26,27,"pl-c1"],[29,37,"pl-smi"]],[],[],[],[],[[0,2,"pl-k"],[3,24,"pl-en"]],[[4,12,"pl-en"]],[[8,12,"pl-s"],[8,9,"pl-pds"],[11,12,"pl-pds"]],[[8,16,"pl-en"],[16,18,"pl-k"],[18,34,"pl-en"],[35,39,"pl-en"],[40,41,"pl-c1"],[43,44,"pl-c1"],[46,47,"pl-c1"],[50,54,"pl-en"],[55,57,"pl-c1"],[59,61,"pl-c1"],[63,65,"pl-c1"],[68,69,"pl-c1"]],[],[],[[0,3,"pl-s"]],[],[[1,2,"pl-ent"],[3,8,"pl-e"],[9,10,"pl-s"],[10,16,"pl-s"],[16,17,"pl-s"]],[[1,2,"pl-ent"],[3,7,"pl-e"],[8,9,"pl-s"],[9,52,"pl-s"],[52,53,"pl-s"],[54,60,"pl-e"],[61,62,"pl-s"],[62,68,"pl-s"],[68,69,"pl-s"]],[[3,6,"pl-ent"],[7,10,"pl-e"],[11,12,"pl-s"],[12,32,"pl-s"],[32,33,"pl-s"],[34,39,"pl-e"],[40,41,"pl-s"],[41,45,"pl-s"],[45,46,"pl-s"]],[[2,3,"pl-ent"]]],"colorizedLines":null}},"title":"leetcode-master/problems/背包理论基础01背包-1.md at master · feinan/leetcode-master","appPayload":{},"meta":{"title":"leetcode-master/problems/背包理论基础01背包-1.md at master · feinan/leetcode-master"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/feinan/leetcode-master" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/feinan/leetcode-master/tree/master" data-discover="true">leetcode-master</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/feinan/leetcode-master/tree/master/problems" data-discover="true">problems</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">背包理论基础01背包-1.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_5ipla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_5ipla9lik5_ _R_5ipla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_5ipla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4pla9lik5_" id="_R_14pla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4pla9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4tla9lik5_" id="_R_14tla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4tla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/feinan/leetcode-master/commits/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/feinan/leetcode-master/commits/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="24.9 KB" style="--truncate-max-width:100%"><span>747 lines (552 loc) · 24.9 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/feinan/leetcode-master/tree/master" data-discover="true">leetcode-master</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/feinan/leetcode-master/tree/master/problems" data-discover="true">problems</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">背包理论基础01背包-1.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="24.9 KB" style="--truncate-max-width:100%"><span>747 lines (552 loc) · 24.9 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/feinan/leetcode-master/raw/refs/heads/master/problems/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><p align="center" dir="auto">
<a href="https://www.programmercarl.com/xunlian/xunlianying.html" rel="nofollow">
  <img src="/feinan/leetcode-master/raw/master/pics/训练营.png" width="1000" style="max-width: 100%;">
</a>
</p><p align="center" dir="auto"><strong><a href="/feinan/leetcode-master/blob/master/problems/qita/join.md">参与本项目</a>，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！</strong></p>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">动态规划：01背包理论基础</h1><a id="user-content-动态规划01背包理论基础" class="anchor" aria-label="Permalink: 动态规划：01背包理论基础" href="#动态规划01背包理论基础"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">本题力扣上没有原题，大家可以去<a href="https://kamacoder.com/problempage.php?pid=1046" rel="nofollow">卡码网第46题</a>去练习，题意是一样的。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">算法公开课</h2><a id="user-content-算法公开课" class="anchor" aria-label="Permalink: 算法公开课" href="#算法公开课"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong><a href="https://programmercarl.com/other/gongkaike.html" rel="nofollow">《代码随想录》算法视频公开课</a>：<a href="https://www.bilibili.com/video/BV1cg411g7Y6/" rel="nofollow">带你学透0-1背包问题！</a>，相信结合视频再看本篇题解，更有助于大家对本题的理解</strong>。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">思路</h2><a id="user-content-思路" class="anchor" aria-label="Permalink: 思路" href="#思路"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">这周我们正式开始讲解背包问题！</p>
<p dir="auto">背包问题的经典资料当然是：背包九讲。在公众号「代码随想录」后台回复：背包九讲，就可以获得背包九讲的pdf。</p>
<p dir="auto">但说实话，背包九讲对于小白来说确实不太友好，看起来还是有点费劲的，而且都是伪代码理解起来也吃力。</p>
<p dir="auto">对于面试的话，其实掌握01背包，和完全背包，就够用了，最多可以再来一个多重背包。</p>
<p dir="auto">如果这几种背包，分不清，我这里画了一个图，如下：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/dc16ba7b96175fe08f71acf941ef49794fdbcb1c7cd8229b536e679551881df3/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131373137313330373430372e706e67"><img src="https://camo.githubusercontent.com/dc16ba7b96175fe08f71acf941ef49794fdbcb1c7cd8229b536e679551881df3/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131373137313330373430372e706e67" alt="416.分割等和子集1" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210117171307407.png" style="max-width: 100%;"></a></p>
<p dir="auto">至于背包九讲其他背包，面试几乎不会问，都是竞赛级别的了，leetcode上连多重背包的题目都没有，所以题库也告诉我们，01背包和完全背包就够用了。</p>
<p dir="auto">而完全背包又是也是01背包稍作变化而来，即：完全背包的物品数量是无限的。</p>
<p dir="auto"><strong>所以背包问题的理论基础重中之重是01背包，一定要理解透！</strong></p>
<p dir="auto">leetcode上没有纯01背包的问题，都是01背包应用方面的题目，也就是需要转化为01背包问题。</p>
<p dir="auto"><strong>所以我先通过纯01背包问题，把01背包原理讲清楚，后续再讲解leetcode题目的时候，重点就是讲解如何转化为01背包问题了</strong>。</p>
<p dir="auto">之前可能有些录友已经可以熟练写出背包了，但只要把这个文章仔细看完，相信你会意外收获！</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">01 背包</h3><a id="user-content-01-背包" class="anchor" aria-label="Permalink: 01 背包" href="#01-背包"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]，得到的价值是value[i] 。<strong>每件物品只能用一次</strong>，求解将哪些物品装入背包里物品价值总和最大。</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/53778fdcdd53aac9a447aada4158f75f00bffe729f3686bc2a5d945270ba8248/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131373137353432383338372e6a7067"><img src="https://camo.githubusercontent.com/53778fdcdd53aac9a447aada4158f75f00bffe729f3686bc2a5d945270ba8248/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131373137353432383338372e6a7067" alt="动态规划-背包问题" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210117175428387.jpg" style="max-width: 100%;"></a></p>
<p dir="auto">这是标准的背包问题，以至于很多同学看了这个自然就会想到背包，甚至都不知道暴力的解法应该怎么解了。</p>
<p dir="auto">这样其实是没有从底向上去思考，而是习惯性想到了背包，那么暴力的解法应该是怎么样的呢？</p>
<p dir="auto">每一件物品其实只有两个状态，取或者不取，所以可以使用回溯法搜索出所有的情况，那么时间复杂度就是$o(2^n)$，这里的n表示物品数量。</p>
<p dir="auto"><strong>所以暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化！</strong></p>
<p dir="auto">在下面的讲解中，我举一个例子：</p>
<p dir="auto">背包最大重量为4。</p>
<p dir="auto">物品为：</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th></th>
<th>重量</th>
<th>价值</th>
</tr>
</thead>
<tbody>
<tr>
<td>物品0</td>
<td>1</td>
<td>15</td>
</tr>
<tr>
<td>物品1</td>
<td>3</td>
<td>20</td>
</tr>
<tr>
<td>物品2</td>
<td>4</td>
<td>30</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">问背包能背的物品最大价值是多少？</p>
<p dir="auto">以下讲解和图示中出现的数字都是以这个例子为例。</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">二维dp数组01背包</h3><a id="user-content-二维dp数组01背包" class="anchor" aria-label="Permalink: 二维dp数组01背包" href="#二维dp数组01背包"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">依然动规五部曲分析一波。</p>
<ol dir="auto">
<li>确定dp数组以及下标的含义</li>
</ol>
<p dir="auto">对于背包问题，有一种写法， 是使用二维数组，即<strong>dp[i][j] 表示从下标为[0-i]的物品里任意取，放进容量为j的背包，价值总和最大是多少</strong>。</p>
<p dir="auto">只看这个二维数组的定义，大家一定会有点懵，看下面这个图：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ef9a73b404e3ddf8240cafea7858beb22b6da80296222974811ce0e508bc7ffc/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333030333336312e706e67"><img src="https://camo.githubusercontent.com/ef9a73b404e3ddf8240cafea7858beb22b6da80296222974811ce0e508bc7ffc/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333030333336312e706e67" alt="动态规划-背包问题1" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103003361.png" style="max-width: 100%;"></a></p>
<p dir="auto"><strong>要时刻记着这个dp数组的含义，下面的一些步骤都围绕这dp数组的含义进行的</strong>，如果哪里看懵了，就来回顾一下i代表什么，j又代表什么。</p>
<ol start="2" dir="auto">
<li>确定递推公式</li>
</ol>
<p dir="auto">再回顾一下dp[i][j]的含义：从下标为[0-i]的物品里任意取，放进容量为j的背包，价值总和最大是多少。</p>
<p dir="auto">那么可以有两个方向推出来dp[i][j]，</p>
<ul dir="auto">
<li><strong>不放物品i</strong>：由dp[i - 1][j]推出，即背包容量为j，里面不放物品i的最大价值，此时dp[i][j]就是dp[i - 1][j]。(其实就是当物品i的重量大于背包j的重量时，物品i无法放进背包中，所以背包内的价值依然和前面相同。)</li>
<li><strong>放物品i</strong>：由dp[i - 1][j - weight[i]]推出，dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值，那么dp[i - 1][j - weight[i]] + value[i] （物品i的价值），就是背包放物品i得到的最大价值</li>
</ul>
<p dir="auto">所以递归公式： dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);</p>
<ol start="3" dir="auto">
<li>dp数组如何初始化</li>
</ol>
<p dir="auto"><strong>关于初始化，一定要和dp数组的定义吻合，否则到递推公式的时候就会越来越乱</strong>。</p>
<p dir="auto">首先从dp[i][j]的定义出发，如果背包容量j为0的话，即dp[i][0]，无论是选取哪些物品，背包价值总和一定为0。如图：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6f98904679377bddd55312ee69ad2a26139907c4c32e5a2c651c6ab1cfc2d5d0/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f323032313031313031303330343139322e706e67"><img src="https://camo.githubusercontent.com/6f98904679377bddd55312ee69ad2a26139907c4c32e5a2c651c6ab1cfc2d5d0/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f323032313031313031303330343139322e706e67" alt="动态规划-背包问题2" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/2021011010304192.png" style="max-width: 100%;"></a></p>
<p dir="auto">在看其他情况。</p>
<p dir="auto">状态转移方程 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 可以看出i 是由 i-1 推导出来，那么i为0的时候就一定要初始化。</p>
<p dir="auto">dp[0][j]，即：i为0，存放编号0的物品的时候，各个容量的背包所能存放的最大价值。</p>
<p dir="auto">那么很明显当 j &lt; weight[0]的时候，dp[0][j] 应该是 0，因为背包容量比编号0的物品重量还小。</p>
<p dir="auto">当j &gt;= weight[0]时，dp[0][j] 应该是value[0]，因为背包容量放足够放编号0物品。</p>
<p dir="auto">代码初始化如下：</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="for (int j = 0 ; j &lt; weight[0]; j++) {  // 当然这一步，如果把dp数组预先初始化为0了，这一步就可以省略，但很多同学应该没有想清楚这一点。
    dp[0][j] = 0;
}
// 正序遍历
for (int j = weight[0]; j &lt;= bagweight; j++) {
    dp[0][j] = value[0];
}"><pre class="notranslate"><code>for (int j = 0 ; j &lt; weight[0]; j++) {  // 当然这一步，如果把dp数组预先初始化为0了，这一步就可以省略，但很多同学应该没有想清楚这一点。
    dp[0][j] = 0;
}
// 正序遍历
for (int j = weight[0]; j &lt;= bagweight; j++) {
    dp[0][j] = value[0];
}
</code></pre></div>
<p dir="auto">此时dp数组初始化情况如图所示：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/addab96ec23fdff91c01f29a09eda3449300870c7dd6a78deabb4d7dcf93b7a6/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333130393134302e706e67"><img src="https://camo.githubusercontent.com/addab96ec23fdff91c01f29a09eda3449300870c7dd6a78deabb4d7dcf93b7a6/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333130393134302e706e67" alt="动态规划-背包问题7" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103109140.png" style="max-width: 100%;"></a></p>
<p dir="auto">dp[0][j] 和 dp[i][0] 都已经初始化了，那么其他下标应该初始化多少呢？</p>
<p dir="auto">其实从递归公式： dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 可以看出dp[i][j]  是由左上方数值推导出来了，那么 其他下标初始为什么数值都可以，因为都会被覆盖。</p>
<p dir="auto"><strong>初始-1，初始-2，初始100，都可以！</strong></p>
<p dir="auto">但只不过一开始就统一把dp数组统一初始为0，更方便一些。</p>
<p dir="auto">如图：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0b1f498d5d9967b075073d1cbe8623bb9f7bb84f309e932a7da15ffd032de679/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f2545352538412541382545362538302538312545382541372538342545352538382539322d25453825383325384325453525384325383525453925393725414525453925413225393831302e6a7067"><img src="https://camo.githubusercontent.com/0b1f498d5d9967b075073d1cbe8623bb9f7bb84f309e932a7da15ffd032de679/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f2545352538412541382545362538302538312545382541372538342545352538382539322d25453825383325384325453525384325383525453925393725414525453925413225393831302e6a7067" alt="动态规划-背包问题10" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92-%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%9810.jpg" style="max-width: 100%;"></a></p>
<p dir="auto">最后初始化代码如下：</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// 初始化 dp
vector&lt;vector&lt;int&gt;&gt; dp(weight.size(), vector&lt;int&gt;(bagweight + 1, 0));
for (int j = weight[0]; j &lt;= bagweight; j++) {
    dp[0][j] = value[0];
}
"><pre class="notranslate"><code>// 初始化 dp
vector&lt;vector&lt;int&gt;&gt; dp(weight.size(), vector&lt;int&gt;(bagweight + 1, 0));
for (int j = weight[0]; j &lt;= bagweight; j++) {
    dp[0][j] = value[0];
}

</code></pre></div>
<p dir="auto"><strong>费了这么大的功夫，才把如何初始化讲清楚，相信不少同学平时初始化dp数组是凭感觉来的，但有时候感觉是不靠谱的</strong>。</p>
<ol start="4" dir="auto">
<li>确定遍历顺序</li>
</ol>
<p dir="auto">在如下图中，可以看出，有两个遍历的维度：物品与背包重量</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/358d6ba507f44dcf026b948eb0b895cca81207196b46352b957a5354db5c355a/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f323032313031313031303331343035352e706e67"><img src="https://camo.githubusercontent.com/358d6ba507f44dcf026b948eb0b895cca81207196b46352b957a5354db5c355a/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f323032313031313031303331343035352e706e67" alt="动态规划-背包问题3" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/2021011010314055.png" style="max-width: 100%;"></a></p>
<p dir="auto">那么问题来了，<strong>先遍历 物品还是先遍历背包重量呢？</strong></p>
<p dir="auto"><strong>其实都可以！！ 但是先遍历物品更好理解</strong>。</p>
<p dir="auto">那么我先给出先遍历物品，然后遍历背包重量的代码。</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// weight数组的大小 就是物品个数
for(int i = 1; i &lt; weight.size(); i++) { // 遍历物品
    for(int j = 0; j &lt;= bagweight; j++) { // 遍历背包容量
        if (j &lt; weight[i]) dp[i][j] = dp[i - 1][j];
        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

    }
}"><pre class="notranslate"><code>// weight数组的大小 就是物品个数
for(int i = 1; i &lt; weight.size(); i++) { // 遍历物品
    for(int j = 0; j &lt;= bagweight; j++) { // 遍历背包容量
        if (j &lt; weight[i]) dp[i][j] = dp[i - 1][j];
        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

    }
}
</code></pre></div>
<p dir="auto"><strong>先遍历背包，再遍历物品，也是可以的！（注意我这里使用的二维dp数组）</strong></p>
<p dir="auto">例如这样：</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// weight数组的大小 就是物品个数
for(int j = 0; j &lt;= bagweight; j++) { // 遍历背包容量
    for(int i = 1; i &lt; weight.size(); i++) { // 遍历物品
        if (j &lt; weight[i]) dp[i][j] = dp[i - 1][j];
        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
    }
}"><pre class="notranslate"><code>// weight数组的大小 就是物品个数
for(int j = 0; j &lt;= bagweight; j++) { // 遍历背包容量
    for(int i = 1; i &lt; weight.size(); i++) { // 遍历物品
        if (j &lt; weight[i]) dp[i][j] = dp[i - 1][j];
        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
    }
}
</code></pre></div>
<p dir="auto">为什么也是可以的呢？</p>
<p dir="auto"><strong>要理解递归的本质和递推的方向</strong>。</p>
<p dir="auto">dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 递归公式中可以看出dp[i][j]是靠dp[i-1][j]和dp[i - 1][j - weight[i]]推导出来的。</p>
<p dir="auto">dp[i-1][j]和dp[i - 1][j - weight[i]] 都在dp[i][j]的左上角方向（包括正上方向），那么先遍历物品，再遍历背包的过程如图所示：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/7a7c0596dcda9f01c87026d2c61cc1446fbcedeaf4c89e205bf6ba6545d47c84/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f3230323130313130313033323132342e706e67"><img src="https://camo.githubusercontent.com/7a7c0596dcda9f01c87026d2c61cc1446fbcedeaf4c89e205bf6ba6545d47c84/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f3230323130313130313033323132342e706e67" alt="动态规划-背包问题5" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/202101101032124.png" style="max-width: 100%;"></a></p>
<p dir="auto">再来看看先遍历背包，再遍历物品呢，如图：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0401c24a5277ad6908e642f9569380dc8d3d8227f1eb05bf9b26fc8be10b16fb/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333234343730312e706e67"><img src="https://camo.githubusercontent.com/0401c24a5277ad6908e642f9569380dc8d3d8227f1eb05bf9b26fc8be10b16fb/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131303130333234343730312e706e67" alt="动态规划-背包问题6" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210110103244701.png" style="max-width: 100%;"></a></p>
<p dir="auto"><strong>大家可以看出，虽然两个for循环遍历的次序不同，但是dp[i][j]所需要的数据就是左上角，根本不影响dp[i][j]公式的推导！</strong></p>
<p dir="auto">但先遍历物品再遍历背包这个顺序更好理解。</p>
<p dir="auto"><strong>其实背包问题里，两个for循环的先后循序是非常有讲究的，理解遍历顺序其实比理解推导公式难多了</strong>。</p>
<ol start="5" dir="auto">
<li>举例推导dp数组</li>
</ol>
<p dir="auto">来看一下对应的dp数组的数值，如图：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/337b3b43b9f8fc6c578405e80f6f7cc0ad82d51e23ebc60e99d2f1e63c064d9e/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131383136333432353132392e6a7067"><img src="https://camo.githubusercontent.com/337b3b43b9f8fc6c578405e80f6f7cc0ad82d51e23ebc60e99d2f1e63c064d9e/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303131383136333432353132392e6a7067" alt="动态规划-背包问题4" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210118163425129.jpg" style="max-width: 100%;"></a></p>
<p dir="auto">最终结果就是dp[2][4]。</p>
<p dir="auto">建议大家此时自己在纸上推导一遍，看看dp数组里每一个数值是不是这样的。</p>
<p dir="auto"><strong>做动态规划的题目，最好的过程就是自己在纸上举一个例子把对应的dp数组的数值推导一下，然后在动手写代码！</strong></p>
<p dir="auto">很多同学做dp题目，遇到各种问题，然后凭感觉东改改西改改，怎么改都不对，或者稀里糊涂就改过了。</p>
<p dir="auto">主要就是自己没有动手推导一下dp数组的演变过程，如果推导明白了，代码写出来就算有问题，只要把dp数组打印出来，对比一下和自己推导的有什么差异，很快就可以发现问题了。</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="void test_2_wei_bag_problem1() {
    vector&lt;int&gt; weight = {1, 3, 4};
    vector&lt;int&gt; value = {15, 20, 30};
    int bagweight = 4;

    // 二维数组
    vector&lt;vector&lt;int&gt;&gt; dp(weight.size(), vector&lt;int&gt;(bagweight + 1, 0));

    // 初始化
    for (int j = weight[0]; j &lt;= bagweight; j++) {
        dp[0][j] = value[0];
    }

    // weight数组的大小 就是物品个数
    for(int i = 1; i &lt; weight.size(); i++) { // 遍历物品
        for(int j = 0; j &lt;= bagweight; j++) { // 遍历背包容量
            if (j &lt; weight[i]) dp[i][j] = dp[i - 1][j];
            else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

        }
    }

    cout &lt;&lt; dp[weight.size() - 1][bagweight] &lt;&lt; endl;
}

int main() {
    test_2_wei_bag_problem1();
}
"><pre><span class="pl-k">void</span> <span class="pl-en">test_2_wei_bag_problem1</span>() {
    vector&lt;<span class="pl-k">int</span>&gt; weight = {<span class="pl-c1">1</span>, <span class="pl-c1">3</span>, <span class="pl-c1">4</span>};
    vector&lt;<span class="pl-k">int</span>&gt; value = {<span class="pl-c1">15</span>, <span class="pl-c1">20</span>, <span class="pl-c1">30</span>};
    <span class="pl-k">int</span> bagweight = <span class="pl-c1">4</span>;

    <span class="pl-c"><span class="pl-c">//</span> 二维数组</span>
    vector&lt;vector&lt;<span class="pl-k">int</span>&gt;&gt; <span class="pl-c1">dp</span>(weight.<span class="pl-c1">size</span>(), vector&lt;<span class="pl-k">int</span>&gt;(bagweight + <span class="pl-c1">1</span>, <span class="pl-c1">0</span>));

    <span class="pl-c"><span class="pl-c">//</span> 初始化</span>
    <span class="pl-k">for</span> (<span class="pl-k">int</span> j = weight[<span class="pl-c1">0</span>]; j &lt;= bagweight; j++) {
        dp[<span class="pl-c1">0</span>][j] = value[<span class="pl-c1">0</span>];
    }

    <span class="pl-c"><span class="pl-c">//</span> weight数组的大小 就是物品个数</span>
    <span class="pl-k">for</span>(<span class="pl-k">int</span> i = <span class="pl-c1">1</span>; i &lt; weight.<span class="pl-c1">size</span>(); i++) { <span class="pl-c"><span class="pl-c">//</span> 遍历物品</span>
        <span class="pl-k">for</span>(<span class="pl-k">int</span> j = <span class="pl-c1">0</span>; j &lt;= bagweight; j++) { <span class="pl-c"><span class="pl-c">//</span> 遍历背包容量</span>
            <span class="pl-k">if</span> (j &lt; weight[i]) dp[i][j] = dp[i - <span class="pl-c1">1</span>][j];
            <span class="pl-k">else</span> dp[i][j] = <span class="pl-c1">max</span>(dp[i - <span class="pl-c1">1</span>][j], dp[i - <span class="pl-c1">1</span>][j - weight[i]] + value[i]);

        }
    }

    cout &lt;&lt; dp[weight.<span class="pl-c1">size</span>() - <span class="pl-c1">1</span>][bagweight] &lt;&lt; endl;
}

<span class="pl-k">int</span> <span class="pl-en">main</span>() {
    <span class="pl-c1">test_2_wei_bag_problem1</span>();
}
</pre></div>
<p dir="auto">本题力扣上没有原题，大家可以去<a href="https://kamacoder.com/problempage.php?pid=1046" rel="nofollow">卡码网第46题</a>去练习，题意是一样的，代码如下：</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="
//二维dp数组实现
#include &lt;bits/stdc++.h&gt;
using namespace std;

int n, bagweight;// bagweight代表行李箱空间
void solve() {
    vector&lt;int&gt; weight(n, 0); // 存储每件物品所占空间
    vector&lt;int&gt; value(n, 0);  // 存储每件物品价值
    for(int i = 0; i &lt; n; ++i) {
        cin &gt;&gt; weight[i];
    }
    for(int j = 0; j &lt; n; ++j) {
        cin &gt;&gt; value[j];
    }
    // dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值
    vector&lt;vector&lt;int&gt;&gt; dp(weight.size(), vector&lt;int&gt;(bagweight + 1, 0));

    // 初始化, 因为需要用到dp[i - 1]的值
    // j &lt; weight[0]已在上方被初始化为0
    // j &gt;= weight[0]的值就初始化为value[0]
    for (int j = weight[0]; j &lt;= bagweight; j++) {
        dp[0][j] = value[0];
    }

    for(int i = 1; i &lt; weight.size(); i++) { // 遍历科研物品
        for(int j = 0; j &lt;= bagweight; j++) { // 遍历行李箱容量
            // 如果装不下这个物品,那么就继承dp[i - 1][j]的值
            if (j &lt; weight[i]) dp[i][j] = dp[i - 1][j];
            // 如果能装下,就将值更新为 不装这个物品的最大值 和 装这个物品的最大值 中的 最大值
            // 装这个物品的最大值由容量为j - weight[i]的包任意放入序号为[0, i - 1]的最大值 + 该物品的价值构成
            else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
        }
    }
    cout &lt;&lt; dp[weight.size() - 1][bagweight] &lt;&lt; endl;
}

int main() {
    while(cin &gt;&gt; n &gt;&gt; bagweight) {
        solve();
    }
    return 0;
}
"><pre><span class="pl-c"><span class="pl-c">//</span>二维dp数组实现</span>
#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>bits/stdc++.h<span class="pl-pds">&gt;</span></span>
<span class="pl-k">using</span> <span class="pl-k">namespace</span> <span class="pl-en">std</span><span class="pl-k">;</span>

<span class="pl-k">int</span> n, bagweight;<span class="pl-c"><span class="pl-c">//</span> bagweight代表行李箱空间</span>
<span class="pl-k">void</span> <span class="pl-en">solve</span>() {
    vector&lt;<span class="pl-k">int</span>&gt; <span class="pl-c1">weight</span>(n, <span class="pl-c1">0</span>); <span class="pl-c"><span class="pl-c">//</span> 存储每件物品所占空间</span>
    vector&lt;<span class="pl-k">int</span>&gt; <span class="pl-c1">value</span>(n, <span class="pl-c1">0</span>);  <span class="pl-c"><span class="pl-c">//</span> 存储每件物品价值</span>
    <span class="pl-k">for</span>(<span class="pl-k">int</span> i = <span class="pl-c1">0</span>; i &lt; n; ++i) {
        cin &gt;&gt; weight[i];
    }
    <span class="pl-k">for</span>(<span class="pl-k">int</span> j = <span class="pl-c1">0</span>; j &lt; n; ++j) {
        cin &gt;&gt; value[j];
    }
    <span class="pl-c"><span class="pl-c">//</span> dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值</span>
    vector&lt;vector&lt;<span class="pl-k">int</span>&gt;&gt; <span class="pl-c1">dp</span>(weight.<span class="pl-c1">size</span>(), vector&lt;<span class="pl-k">int</span>&gt;(bagweight + <span class="pl-c1">1</span>, <span class="pl-c1">0</span>));

    <span class="pl-c"><span class="pl-c">//</span> 初始化, 因为需要用到dp[i - 1]的值</span>
    <span class="pl-c"><span class="pl-c">//</span> j &lt; weight[0]已在上方被初始化为0</span>
    <span class="pl-c"><span class="pl-c">//</span> j &gt;= weight[0]的值就初始化为value[0]</span>
    <span class="pl-k">for</span> (<span class="pl-k">int</span> j = weight[<span class="pl-c1">0</span>]; j &lt;= bagweight; j++) {
        dp[<span class="pl-c1">0</span>][j] = value[<span class="pl-c1">0</span>];
    }

    <span class="pl-k">for</span>(<span class="pl-k">int</span> i = <span class="pl-c1">1</span>; i &lt; weight.<span class="pl-c1">size</span>(); i++) { <span class="pl-c"><span class="pl-c">//</span> 遍历科研物品</span>
        <span class="pl-k">for</span>(<span class="pl-k">int</span> j = <span class="pl-c1">0</span>; j &lt;= bagweight; j++) { <span class="pl-c"><span class="pl-c">//</span> 遍历行李箱容量</span>
            <span class="pl-c"><span class="pl-c">//</span> 如果装不下这个物品,那么就继承dp[i - 1][j]的值</span>
            <span class="pl-k">if</span> (j &lt; weight[i]) dp[i][j] = dp[i - <span class="pl-c1">1</span>][j];
            <span class="pl-c"><span class="pl-c">//</span> 如果能装下,就将值更新为 不装这个物品的最大值 和 装这个物品的最大值 中的 最大值</span>
            <span class="pl-c"><span class="pl-c">//</span> 装这个物品的最大值由容量为j - weight[i]的包任意放入序号为[0, i - 1]的最大值 + 该物品的价值构成</span>
            <span class="pl-k">else</span> dp[i][j] = <span class="pl-c1">max</span>(dp[i - <span class="pl-c1">1</span>][j], dp[i - <span class="pl-c1">1</span>][j - weight[i]] + value[i]);
        }
    }
    cout &lt;&lt; dp[weight.<span class="pl-c1">size</span>() - <span class="pl-c1">1</span>][bagweight] &lt;&lt; endl;
}

<span class="pl-k">int</span> <span class="pl-en">main</span>() {
    <span class="pl-k">while</span>(cin &gt;&gt; n &gt;&gt; bagweight) {
        <span class="pl-c1">solve</span>();
    }
    <span class="pl-k">return</span> <span class="pl-c1">0</span>;
}
</pre></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">总结</h2><a id="user-content-总结" class="anchor" aria-label="Permalink: 总结" href="#总结"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">讲了这么多才刚刚把二维dp的01背包讲完，<strong>这里大家其实可以发现最简单的是推导公式了，推导公式估计看一遍就记下来了，但难就难在如何初始化和遍历顺序上</strong>。</p>
<p dir="auto">可能有的同学并没有注意到初始化 和 遍历顺序的重要性，我们后面做力扣上背包面试题目的时候，大家就会感受出来了。</p>
<p dir="auto">下一篇 还是理论基础，我们再来讲一维dp数组实现的01背包（滚动数组），分析一下和二维有什么区别，在初始化和遍历顺序上又有什么差异，敬请期待！</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">其他语言版本</h2><a id="user-content-其他语言版本" class="anchor" aria-label="Permalink: 其他语言版本" href="#其他语言版本"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Java</h3><a id="user-content-java" class="anchor" aria-label="Permalink: Java" href="#java"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="public class BagProblem {
    public static void main(String[] args) {
        int[] weight = {1,3,4};
        int[] value = {15,20,30};
        int bagSize = 4;
        testWeightBagProblem(weight,value,bagSize);
    }

    /**
     * 动态规划获得结果
     * @param weight  物品的重量
     * @param value   物品的价值
     * @param bagSize 背包的容量
     */
    public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){

        // 创建dp数组
        int goods = weight.length;  // 获取物品的数量
        int[][] dp = new int[goods][bagSize + 1];

        // 初始化dp数组
        // 创建数组后，其中默认的值就是0
        for (int j = weight[0]; j &lt;= bagSize; j++) {
            dp[0][j] = value[0];
        }

        // 填充dp数组
        for (int i = 1; i &lt; weight.length; i++) {
            for (int j = 1; j &lt;= bagSize; j++) {
                if (j &lt; weight[i]) {
                    /**
                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的
                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值
                     */
                    dp[i][j] = dp[i-1][j];
                } else {
                    /**
                     * 当前背包的容量可以放下物品i
                     * 那么此时分两种情况：
                     *    1、不放物品i
                     *    2、放物品i
                     * 比较这两种情况下，哪种背包中物品的最大价值最大
                     */
                    dp[i][j] = Math.max(dp[i-1][j] , dp[i-1][j-weight[i]] + value[i]);
                }
            }
        }

        // 打印dp数组
        for (int i = 0; i &lt; goods; i++) {
            for (int j = 0; j &lt;= bagSize; j++) {
                System.out.print(dp[i][j] + &quot;\t&quot;);
            }
            System.out.println(&quot;\n&quot;);
        }
    }
}
"><pre><span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">BagProblem</span> {
    <span class="pl-k">public</span> <span class="pl-k">static</span> <span class="pl-smi">void</span> <span class="pl-en">main</span>(<span class="pl-smi">String</span>[] <span class="pl-s1">args</span>) {
        <span class="pl-smi">int</span>[] <span class="pl-s1">weight</span> = {<span class="pl-c1">1</span>,<span class="pl-c1">3</span>,<span class="pl-c1">4</span>};
        <span class="pl-smi">int</span>[] <span class="pl-s1">value</span> = {<span class="pl-c1">15</span>,<span class="pl-c1">20</span>,<span class="pl-c1">30</span>};
        <span class="pl-smi">int</span> <span class="pl-s1">bagSize</span> = <span class="pl-c1">4</span>;
        <span class="pl-en">testWeightBagProblem</span>(<span class="pl-s1">weight</span>,<span class="pl-s1">value</span>,<span class="pl-s1">bagSize</span>);
    }

    <span class="pl-c">/**</span>
<span class="pl-c">     * 动态规划获得结果</span>
<span class="pl-c">     * @param weight  物品的重量</span>
<span class="pl-c">     * @param value   物品的价值</span>
<span class="pl-c">     * @param bagSize 背包的容量</span>
<span class="pl-c">     */</span>
    <span class="pl-k">public</span> <span class="pl-k">static</span> <span class="pl-smi">void</span> <span class="pl-en">testWeightBagProblem</span>(<span class="pl-smi">int</span>[] <span class="pl-s1">weight</span>, <span class="pl-smi">int</span>[] <span class="pl-s1">value</span>, <span class="pl-smi">int</span> <span class="pl-s1">bagSize</span>){

        <span class="pl-c">// 创建dp数组</span>
        <span class="pl-smi">int</span> <span class="pl-s1">goods</span> = <span class="pl-s1">weight</span>.<span class="pl-s1">length</span>;  <span class="pl-c">// 获取物品的数量</span>
        <span class="pl-smi">int</span>[][] <span class="pl-s1">dp</span> = <span class="pl-k">new</span> <span class="pl-smi">int</span>[<span class="pl-s1">goods</span>][<span class="pl-s1">bagSize</span> + <span class="pl-c1">1</span>];

        <span class="pl-c">// 初始化dp数组</span>
        <span class="pl-c">// 创建数组后，其中默认的值就是0</span>
        <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">j</span> = <span class="pl-s1">weight</span>[<span class="pl-c1">0</span>]; <span class="pl-s1">j</span> &lt;= <span class="pl-s1">bagSize</span>; <span class="pl-s1">j</span>++) {
            <span class="pl-s1">dp</span>[<span class="pl-c1">0</span>][<span class="pl-s1">j</span>] = <span class="pl-s1">value</span>[<span class="pl-c1">0</span>];
        }

        <span class="pl-c">// 填充dp数组</span>
        <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">i</span> = <span class="pl-c1">1</span>; <span class="pl-s1">i</span> &lt; <span class="pl-s1">weight</span>.<span class="pl-s1">length</span>; <span class="pl-s1">i</span>++) {
            <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">j</span> = <span class="pl-c1">1</span>; <span class="pl-s1">j</span> &lt;= <span class="pl-s1">bagSize</span>; <span class="pl-s1">j</span>++) {
                <span class="pl-k">if</span> (<span class="pl-s1">j</span> &lt; <span class="pl-s1">weight</span>[<span class="pl-s1">i</span>]) {
                    <span class="pl-c">/**</span>
<span class="pl-c">                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的</span>
<span class="pl-c">                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值</span>
<span class="pl-c">                     */</span>
                    <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] = <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>-<span class="pl-c1">1</span>][<span class="pl-s1">j</span>];
                } <span class="pl-k">else</span> {
                    <span class="pl-c">/**</span>
<span class="pl-c">                     * 当前背包的容量可以放下物品i</span>
<span class="pl-c">                     * 那么此时分两种情况：</span>
<span class="pl-c">                     *    1、不放物品i</span>
<span class="pl-c">                     *    2、放物品i</span>
<span class="pl-c">                     * 比较这两种情况下，哪种背包中物品的最大价值最大</span>
<span class="pl-c">                     */</span>
                    <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] = <span class="pl-smi">Math</span>.<span class="pl-en">max</span>(<span class="pl-s1">dp</span>[<span class="pl-s1">i</span>-<span class="pl-c1">1</span>][<span class="pl-s1">j</span>] , <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>-<span class="pl-c1">1</span>][<span class="pl-s1">j</span>-<span class="pl-s1">weight</span>[<span class="pl-s1">i</span>]] + <span class="pl-s1">value</span>[<span class="pl-s1">i</span>]);
                }
            }
        }

        <span class="pl-c">// 打印dp数组</span>
        <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">i</span> = <span class="pl-c1">0</span>; <span class="pl-s1">i</span> &lt; <span class="pl-s1">goods</span>; <span class="pl-s1">i</span>++) {
            <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">j</span> = <span class="pl-c1">0</span>; <span class="pl-s1">j</span> &lt;= <span class="pl-s1">bagSize</span>; <span class="pl-s1">j</span>++) {
                <span class="pl-smi">System</span>.<span class="pl-s1">out</span>.<span class="pl-en">print</span>(<span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] + <span class="pl-s">"<span class="pl-cce">\t</span>"</span>);
            }
            <span class="pl-smi">System</span>.<span class="pl-s1">out</span>.<span class="pl-en">println</span>(<span class="pl-s">"<span class="pl-cce">\n</span>"</span>);
        }
    }
}</pre></div>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import java.util.Arrays;

public class BagProblem {
    public static void main(String[] args) {
        int[] weight = {1,3,4};
        int[] value = {15,20,30};
        int bagSize = 4;
        testWeightBagProblem(weight,value,bagSize);
    }

    /**
     * 初始化 dp 数组做了简化(给物品增加冗余维)。这样初始化dp数组，默认全为0即可。
     * dp[i][j] 表示从下标为[0 - i-1]的物品里任意取，放进容量为j的背包，价值总和最大是多少。
     * 其实是模仿背包重量从 0 开始，背包容量 j 为 0 的话，即dp[i][0]，无论是选取哪些物品，背包价值总和一定为 0。
     * 可选物品也可以从无开始，也就是没有物品可选，即dp[0][j]，这样无论背包容量为多少，背包价值总和一定为 0。
     * @param weight  物品的重量
     * @param value   物品的价值
     * @param bagSize 背包的容量
     */
    public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){

        // 创建dp数组
        int goods = weight.length;  // 获取物品的数量
        int[][] dp = new int[goods + 1][bagSize + 1];  // 给物品增加冗余维，i = 0 表示没有物品可选

        // 初始化dp数组，默认全为0即可
        // 填充dp数组
        for (int i = 1; i &lt;= goods; i++) {
            for (int j = 1; j &lt;= bagSize; j++) {
                if (j &lt; weight[i - 1]) {  // i - 1 对应物品 i
                    /**
                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的
                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值
                     */
                    dp[i][j] = dp[i - 1][j];
                } else {
                    /**
                     * 当前背包的容量可以放下物品i
                     * 那么此时分两种情况：
                     *    1、不放物品i
                     *    2、放物品i
                     * 比较这两种情况下，哪种背包中物品的最大价值最大
                     */
                    dp[i][j] = Math.max(dp[i - 1][j] , dp[i - 1][j - weight[i - 1]] + value[i - 1]);  // i - 1 对应物品 i
                }
            }
        }

        // 打印dp数组
        for(int[] arr : dp){
            System.out.println(Arrays.toString(arr));
        }
    }
}
"><pre><span class="pl-k">import</span> <span class="pl-s1">java</span>.<span class="pl-s1">util</span>.<span class="pl-s1">Arrays</span>;

<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">BagProblem</span> {
    <span class="pl-k">public</span> <span class="pl-k">static</span> <span class="pl-smi">void</span> <span class="pl-en">main</span>(<span class="pl-smi">String</span>[] <span class="pl-s1">args</span>) {
        <span class="pl-smi">int</span>[] <span class="pl-s1">weight</span> = {<span class="pl-c1">1</span>,<span class="pl-c1">3</span>,<span class="pl-c1">4</span>};
        <span class="pl-smi">int</span>[] <span class="pl-s1">value</span> = {<span class="pl-c1">15</span>,<span class="pl-c1">20</span>,<span class="pl-c1">30</span>};
        <span class="pl-smi">int</span> <span class="pl-s1">bagSize</span> = <span class="pl-c1">4</span>;
        <span class="pl-en">testWeightBagProblem</span>(<span class="pl-s1">weight</span>,<span class="pl-s1">value</span>,<span class="pl-s1">bagSize</span>);
    }

    <span class="pl-c">/**</span>
<span class="pl-c">     * 初始化 dp 数组做了简化(给物品增加冗余维)。这样初始化dp数组，默认全为0即可。</span>
<span class="pl-c">     * dp[i][j] 表示从下标为[0 - i-1]的物品里任意取，放进容量为j的背包，价值总和最大是多少。</span>
<span class="pl-c">     * 其实是模仿背包重量从 0 开始，背包容量 j 为 0 的话，即dp[i][0]，无论是选取哪些物品，背包价值总和一定为 0。</span>
<span class="pl-c">     * 可选物品也可以从无开始，也就是没有物品可选，即dp[0][j]，这样无论背包容量为多少，背包价值总和一定为 0。</span>
<span class="pl-c">     * @param weight  物品的重量</span>
<span class="pl-c">     * @param value   物品的价值</span>
<span class="pl-c">     * @param bagSize 背包的容量</span>
<span class="pl-c">     */</span>
    <span class="pl-k">public</span> <span class="pl-k">static</span> <span class="pl-smi">void</span> <span class="pl-en">testWeightBagProblem</span>(<span class="pl-smi">int</span>[] <span class="pl-s1">weight</span>, <span class="pl-smi">int</span>[] <span class="pl-s1">value</span>, <span class="pl-smi">int</span> <span class="pl-s1">bagSize</span>){

        <span class="pl-c">// 创建dp数组</span>
        <span class="pl-smi">int</span> <span class="pl-s1">goods</span> = <span class="pl-s1">weight</span>.<span class="pl-s1">length</span>;  <span class="pl-c">// 获取物品的数量</span>
        <span class="pl-smi">int</span>[][] <span class="pl-s1">dp</span> = <span class="pl-k">new</span> <span class="pl-smi">int</span>[<span class="pl-s1">goods</span> + <span class="pl-c1">1</span>][<span class="pl-s1">bagSize</span> + <span class="pl-c1">1</span>];  <span class="pl-c">// 给物品增加冗余维，i = 0 表示没有物品可选</span>

        <span class="pl-c">// 初始化dp数组，默认全为0即可</span>
        <span class="pl-c">// 填充dp数组</span>
        <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">i</span> = <span class="pl-c1">1</span>; <span class="pl-s1">i</span> &lt;= <span class="pl-s1">goods</span>; <span class="pl-s1">i</span>++) {
            <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">j</span> = <span class="pl-c1">1</span>; <span class="pl-s1">j</span> &lt;= <span class="pl-s1">bagSize</span>; <span class="pl-s1">j</span>++) {
                <span class="pl-k">if</span> (<span class="pl-s1">j</span> &lt; <span class="pl-s1">weight</span>[<span class="pl-s1">i</span> - <span class="pl-c1">1</span>]) {  <span class="pl-c">// i - 1 对应物品 i</span>
                    <span class="pl-c">/**</span>
<span class="pl-c">                     * 当前背包的容量都没有当前物品i大的时候，是不放物品i的</span>
<span class="pl-c">                     * 那么前i-1个物品能放下的最大价值就是当前情况的最大价值</span>
<span class="pl-c">                     */</span>
                    <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] = <span class="pl-s1">dp</span>[<span class="pl-s1">i</span> - <span class="pl-c1">1</span>][<span class="pl-s1">j</span>];
                } <span class="pl-k">else</span> {
                    <span class="pl-c">/**</span>
<span class="pl-c">                     * 当前背包的容量可以放下物品i</span>
<span class="pl-c">                     * 那么此时分两种情况：</span>
<span class="pl-c">                     *    1、不放物品i</span>
<span class="pl-c">                     *    2、放物品i</span>
<span class="pl-c">                     * 比较这两种情况下，哪种背包中物品的最大价值最大</span>
<span class="pl-c">                     */</span>
                    <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] = <span class="pl-smi">Math</span>.<span class="pl-en">max</span>(<span class="pl-s1">dp</span>[<span class="pl-s1">i</span> - <span class="pl-c1">1</span>][<span class="pl-s1">j</span>] , <span class="pl-s1">dp</span>[<span class="pl-s1">i</span> - <span class="pl-c1">1</span>][<span class="pl-s1">j</span> - <span class="pl-s1">weight</span>[<span class="pl-s1">i</span> - <span class="pl-c1">1</span>]] + <span class="pl-s1">value</span>[<span class="pl-s1">i</span> - <span class="pl-c1">1</span>]);  <span class="pl-c">// i - 1 对应物品 i</span>
                }
            }
        }

        <span class="pl-c">// 打印dp数组</span>
        <span class="pl-k">for</span>(<span class="pl-smi">int</span>[] <span class="pl-s1">arr</span> : <span class="pl-s1">dp</span>){
            <span class="pl-smi">System</span>.<span class="pl-s1">out</span>.<span class="pl-en">println</span>(<span class="pl-smi">Arrays</span>.<span class="pl-en">toString</span>(<span class="pl-s1">arr</span>));
        }
    }
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Python</h3><a id="user-content-python" class="anchor" aria-label="Permalink: Python" href="#python"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">无参数版</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="def test_2_wei_bag_problem1():
    weight = [1, 3, 4]
    value = [15, 20, 30]
    bagweight = 4

    # 二维数组
    dp = [[0] * (bagweight + 1) for _ in range(len(weight))]

    # 初始化
    for j in range(weight[0], bagweight + 1):
        dp[0][j] = value[0]

    # weight数组的大小就是物品个数
    for i in range(1, len(weight)):  # 遍历物品
        for j in range(bagweight + 1):  # 遍历背包容量
            if j &lt; weight[i]:
                dp[i][j] = dp[i - 1][j]
            else:
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])

    print(dp[len(weight) - 1][bagweight])

test_2_wei_bag_problem1()
"><pre><span class="pl-k">def</span> <span class="pl-en">test_2_wei_bag_problem1</span>():
    <span class="pl-s1">weight</span> <span class="pl-c1">=</span> [<span class="pl-c1">1</span>, <span class="pl-c1">3</span>, <span class="pl-c1">4</span>]
    <span class="pl-s1">value</span> <span class="pl-c1">=</span> [<span class="pl-c1">15</span>, <span class="pl-c1">20</span>, <span class="pl-c1">30</span>]
    <span class="pl-s1">bagweight</span> <span class="pl-c1">=</span> <span class="pl-c1">4</span>

    <span class="pl-c"># 二维数组</span>
    <span class="pl-s1">dp</span> <span class="pl-c1">=</span> [[<span class="pl-c1">0</span>] <span class="pl-c1">*</span> (<span class="pl-s1">bagweight</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span>) <span class="pl-k">for</span> <span class="pl-s1">_</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-en">len</span>(<span class="pl-s1">weight</span>))]

    <span class="pl-c"># 初始化</span>
    <span class="pl-k">for</span> <span class="pl-s1">j</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-s1">weight</span>[<span class="pl-c1">0</span>], <span class="pl-s1">bagweight</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span>):
        <span class="pl-s1">dp</span>[<span class="pl-c1">0</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">value</span>[<span class="pl-c1">0</span>]

    <span class="pl-c"># weight数组的大小就是物品个数</span>
    <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">1</span>, <span class="pl-en">len</span>(<span class="pl-s1">weight</span>)):  <span class="pl-c"># 遍历物品</span>
        <span class="pl-k">for</span> <span class="pl-s1">j</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-s1">bagweight</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span>):  <span class="pl-c"># 遍历背包容量</span>
            <span class="pl-k">if</span> <span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">weight</span>[<span class="pl-s1">i</span>]:
                <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">dp</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">j</span>]
            <span class="pl-k">else</span>:
                <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-en">max</span>(<span class="pl-s1">dp</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">j</span>], <span class="pl-s1">dp</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">j</span> <span class="pl-c1">-</span> <span class="pl-s1">weight</span>[<span class="pl-s1">i</span>]] <span class="pl-c1">+</span> <span class="pl-s1">value</span>[<span class="pl-s1">i</span>])

    <span class="pl-en">print</span>(<span class="pl-s1">dp</span>[<span class="pl-en">len</span>(<span class="pl-s1">weight</span>) <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">bagweight</span>])

<span class="pl-en">test_2_wei_bag_problem1</span>()</pre></div>
<p dir="auto">有参数版</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="def test_2_wei_bag_problem1(weight, value, bagweight):
    # 二维数组
    dp = [[0] * (bagweight + 1) for _ in range(len(weight))]

    # 初始化
    for j in range(weight[0], bagweight + 1):
        dp[0][j] = value[0]

    # weight数组的大小就是物品个数
    for i in range(1, len(weight)):  # 遍历物品
        for j in range(bagweight + 1):  # 遍历背包容量
            if j &lt; weight[i]:
                dp[i][j] = dp[i - 1][j]
            else:
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])

    return dp[len(weight) - 1][bagweight]

if __name__ == &quot;__main__&quot;:

    weight = [1, 3, 4]
    value = [15, 20, 30]
    bagweight = 4

    result = test_2_wei_bag_problem1(weight, value, bagweight)
    print(result)

"><pre><span class="pl-k">def</span> <span class="pl-en">test_2_wei_bag_problem1</span>(<span class="pl-s1">weight</span>, <span class="pl-s1">value</span>, <span class="pl-s1">bagweight</span>):
    <span class="pl-c"># 二维数组</span>
    <span class="pl-s1">dp</span> <span class="pl-c1">=</span> [[<span class="pl-c1">0</span>] <span class="pl-c1">*</span> (<span class="pl-s1">bagweight</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span>) <span class="pl-k">for</span> <span class="pl-s1">_</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-en">len</span>(<span class="pl-s1">weight</span>))]

    <span class="pl-c"># 初始化</span>
    <span class="pl-k">for</span> <span class="pl-s1">j</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-s1">weight</span>[<span class="pl-c1">0</span>], <span class="pl-s1">bagweight</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span>):
        <span class="pl-s1">dp</span>[<span class="pl-c1">0</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">value</span>[<span class="pl-c1">0</span>]

    <span class="pl-c"># weight数组的大小就是物品个数</span>
    <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">1</span>, <span class="pl-en">len</span>(<span class="pl-s1">weight</span>)):  <span class="pl-c"># 遍历物品</span>
        <span class="pl-k">for</span> <span class="pl-s1">j</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-s1">bagweight</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span>):  <span class="pl-c"># 遍历背包容量</span>
            <span class="pl-k">if</span> <span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">weight</span>[<span class="pl-s1">i</span>]:
                <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">dp</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">j</span>]
            <span class="pl-k">else</span>:
                <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-en">max</span>(<span class="pl-s1">dp</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">j</span>], <span class="pl-s1">dp</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">j</span> <span class="pl-c1">-</span> <span class="pl-s1">weight</span>[<span class="pl-s1">i</span>]] <span class="pl-c1">+</span> <span class="pl-s1">value</span>[<span class="pl-s1">i</span>])

    <span class="pl-k">return</span> <span class="pl-s1">dp</span>[<span class="pl-en">len</span>(<span class="pl-s1">weight</span>) <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">bagweight</span>]

<span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">"__main__"</span>:

    <span class="pl-s1">weight</span> <span class="pl-c1">=</span> [<span class="pl-c1">1</span>, <span class="pl-c1">3</span>, <span class="pl-c1">4</span>]
    <span class="pl-s1">value</span> <span class="pl-c1">=</span> [<span class="pl-c1">15</span>, <span class="pl-c1">20</span>, <span class="pl-c1">30</span>]
    <span class="pl-s1">bagweight</span> <span class="pl-c1">=</span> <span class="pl-c1">4</span>

    <span class="pl-s1">result</span> <span class="pl-c1">=</span> <span class="pl-en">test_2_wei_bag_problem1</span>(<span class="pl-s1">weight</span>, <span class="pl-s1">value</span>, <span class="pl-s1">bagweight</span>)
    <span class="pl-en">print</span>(<span class="pl-s1">result</span>)
</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Go</h3><a id="user-content-go" class="anchor" aria-label="Permalink: Go" href="#go"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-go notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func test_2_wei_bag_problem1(weight, value []int, bagweight int) int {
	// 定义dp数组
	dp := make([][]int, len(weight))
	for i, _ := range dp {
		dp[i] = make([]int, bagweight+1)
	}
	// 初始化
	for j := bagweight; j &gt;= weight[0]; j-- {
		dp[0][j] = dp[0][j-weight[0]] + value[0]
	}
	// 递推公式
	for i := 1; i &lt; len(weight); i++ {
		//正序,也可以倒序
	    for j := 0; j &lt;= bagweight; j++ {
	        if j &lt; weight[i] {
	            dp[i][j] = dp[i-1][j]
	        } else {
	            dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i])
	        }
	    }
	}
	return dp[len(weight)-1][bagweight]
}

func max(a,b int) int {
	if a &gt; b {
		return a
	}
	return b
}

func main() {
	weight := []int{1,3,4}
	value := []int{15,20,30}
	test_2_wei_bag_problem1(weight,value,4)
}"><pre><span class="pl-k">func</span> <span class="pl-s1">test_2_wei_bag_problem1</span>(<span class="pl-s1">weight</span>, <span class="pl-s1">value</span> []<span class="pl-smi">int</span>, <span class="pl-s1">bagweight</span> <span class="pl-smi">int</span>) <span class="pl-smi">int</span> {
	<span class="pl-c">// 定义dp数组</span>
	<span class="pl-s1">dp</span> <span class="pl-c1">:=</span> <span class="pl-s1">make</span>([][]<span class="pl-smi">int</span>, <span class="pl-s1">len</span>(<span class="pl-s1">weight</span>))
	<span class="pl-k">for</span> <span class="pl-s1">i</span>, <span class="pl-s1">_</span> <span class="pl-c1">:=</span> <span class="pl-k">range</span> <span class="pl-s1">dp</span> {
		<span class="pl-s1">dp</span>[<span class="pl-s1">i</span>] <span class="pl-c1">=</span> <span class="pl-s1">make</span>([]<span class="pl-smi">int</span>, <span class="pl-s1">bagweight</span><span class="pl-c1">+</span><span class="pl-c1">1</span>)
	}
	<span class="pl-c">// 初始化</span>
	<span class="pl-k">for</span> <span class="pl-s1">j</span> <span class="pl-c1">:=</span> <span class="pl-s1">bagweight</span>; <span class="pl-s1">j</span> <span class="pl-c1">&gt;=</span> <span class="pl-s1">weight</span>[<span class="pl-c1">0</span>]; <span class="pl-s1">j</span><span class="pl-c1">--</span> {
		<span class="pl-s1">dp</span>[<span class="pl-c1">0</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">dp</span>[<span class="pl-c1">0</span>][<span class="pl-s1">j</span><span class="pl-c1">-</span><span class="pl-s1">weight</span>[<span class="pl-c1">0</span>]] <span class="pl-c1">+</span> <span class="pl-s1">value</span>[<span class="pl-c1">0</span>]
	}
	<span class="pl-c">// 递推公式</span>
	<span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">:=</span> <span class="pl-c1">1</span>; <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">len</span>(<span class="pl-s1">weight</span>); <span class="pl-s1">i</span><span class="pl-c1">++</span> {
		<span class="pl-c">//正序,也可以倒序</span>
	    <span class="pl-k">for</span> <span class="pl-s1">j</span> <span class="pl-c1">:=</span> <span class="pl-c1">0</span>; <span class="pl-s1">j</span> <span class="pl-c1">&lt;=</span> <span class="pl-s1">bagweight</span>; <span class="pl-s1">j</span><span class="pl-c1">++</span> {
	        <span class="pl-k">if</span> <span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">weight</span>[<span class="pl-s1">i</span>] {
	            <span class="pl-smi">dp</span>[<span class="pl-smi">i</span>][<span class="pl-smi">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">dp</span>[<span class="pl-s1">i</span><span class="pl-c1">-</span><span class="pl-c1">1</span>][<span class="pl-s1">j</span>]
	        } <span class="pl-k">else</span> {
	            <span class="pl-smi">dp</span>[<span class="pl-smi">i</span>][<span class="pl-smi">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">max</span>(<span class="pl-s1">dp</span>[<span class="pl-s1">i</span><span class="pl-c1">-</span><span class="pl-c1">1</span>][<span class="pl-s1">j</span>], <span class="pl-s1">dp</span>[<span class="pl-s1">i</span><span class="pl-c1">-</span><span class="pl-c1">1</span>][<span class="pl-s1">j</span><span class="pl-c1">-</span><span class="pl-s1">weight</span>[<span class="pl-s1">i</span>]]<span class="pl-c1">+</span><span class="pl-s1">value</span>[<span class="pl-s1">i</span>])
	        }
	    }
	}
	<span class="pl-k">return</span> <span class="pl-s1">dp</span>[<span class="pl-s1">len</span>(<span class="pl-s1">weight</span>)<span class="pl-c1">-</span><span class="pl-c1">1</span>][<span class="pl-s1">bagweight</span>]
}

<span class="pl-k">func</span> <span class="pl-s1">max</span>(<span class="pl-s1">a</span>,<span class="pl-s1">b</span> <span class="pl-smi">int</span>) <span class="pl-smi">int</span> {
	<span class="pl-k">if</span> <span class="pl-s1">a</span> <span class="pl-c1">&gt;</span> <span class="pl-s1">b</span> {
		<span class="pl-k">return</span> <span class="pl-s1">a</span>
	}
	<span class="pl-k">return</span> <span class="pl-s1">b</span>
}

<span class="pl-k">func</span> <span class="pl-s1">main</span>() {
	<span class="pl-s1">weight</span> <span class="pl-c1">:=</span> []<span class="pl-smi">int</span>{<span class="pl-c1">1</span>,<span class="pl-c1">3</span>,<span class="pl-c1">4</span>}
	<span class="pl-s1">value</span> <span class="pl-c1">:=</span> []<span class="pl-smi">int</span>{<span class="pl-c1">15</span>,<span class="pl-c1">20</span>,<span class="pl-c1">30</span>}
	<span class="pl-s1">test_2_wei_bag_problem1</span>(<span class="pl-s1">weight</span>,<span class="pl-s1">value</span>,<span class="pl-c1">4</span>)
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Javascript</h3><a id="user-content-javascript" class="anchor" aria-label="Permalink: Javascript" href="#javascript"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="function testWeightBagProblem (weight, value, size) {
    // 定义 dp 数组
    const len = weight.length,
          dp = Array(len).fill().map(() =&gt; Array(size + 1).fill(0));

    // 初始化
    for(let j = weight[0]; j &lt;= size; j++) {
        dp[0][j] = value[0];
    }

    // weight 数组的长度len 就是物品个数
    for(let i = 1; i &lt; len; i++) { // 遍历物品
        for(let j = 0; j &lt;= size; j++) { // 遍历背包容量
            if(j &lt; weight[i]) dp[i][j] = dp[i - 1][j];
            else dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
        }
    }

    console.table(dp)

    return dp[len - 1][size];
}

function test () {
    console.log(testWeightBagProblem([1, 3, 4, 5], [15, 20, 30, 55], 6));
}

test();"><pre><span class="pl-k">function</span> <span class="pl-en">testWeightBagProblem</span> <span class="pl-kos">(</span><span class="pl-s1">weight</span><span class="pl-kos">,</span> <span class="pl-s1">value</span><span class="pl-kos">,</span> <span class="pl-s1">size</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-c">// 定义 dp 数组</span>
    <span class="pl-k">const</span> <span class="pl-s1">len</span> <span class="pl-c1">=</span> <span class="pl-s1">weight</span><span class="pl-kos">.</span><span class="pl-c1">length</span><span class="pl-kos">,</span>
          <span class="pl-s1">dp</span> <span class="pl-c1">=</span> <span class="pl-v">Array</span><span class="pl-kos">(</span><span class="pl-s1">len</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">fill</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">map</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-v">Array</span><span class="pl-kos">(</span><span class="pl-s1">size</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">fill</span><span class="pl-kos">(</span><span class="pl-c1">0</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

    <span class="pl-c">// 初始化</span>
    <span class="pl-k">for</span><span class="pl-kos">(</span><span class="pl-k">let</span> <span class="pl-s1">j</span> <span class="pl-c1">=</span> <span class="pl-s1">weight</span><span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">;</span> <span class="pl-s1">j</span> <span class="pl-c1">&lt;=</span> <span class="pl-s1">size</span><span class="pl-kos">;</span> <span class="pl-s1">j</span><span class="pl-c1">++</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-s1">value</span><span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>

    <span class="pl-c">// weight 数组的长度len 就是物品个数</span>
    <span class="pl-k">for</span><span class="pl-kos">(</span><span class="pl-k">let</span> <span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span><span class="pl-kos">;</span> <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">len</span><span class="pl-kos">;</span> <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-c">// 遍历物品</span>
        <span class="pl-k">for</span><span class="pl-kos">(</span><span class="pl-k">let</span> <span class="pl-s1">j</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span> <span class="pl-s1">j</span> <span class="pl-c1">&lt;=</span> <span class="pl-s1">size</span><span class="pl-kos">;</span> <span class="pl-s1">j</span><span class="pl-c1">++</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-c">// 遍历背包容量</span>
            <span class="pl-k">if</span><span class="pl-kos">(</span><span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">weight</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">)</span> <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
            <span class="pl-k">else</span> <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-v">Math</span><span class="pl-kos">.</span><span class="pl-en">max</span><span class="pl-kos">(</span><span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span><span class="pl-kos">,</span> <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span> <span class="pl-c1">-</span> <span class="pl-s1">weight</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">]</span> <span class="pl-c1">+</span> <span class="pl-s1">value</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>

    <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">table</span><span class="pl-kos">(</span><span class="pl-s1">dp</span><span class="pl-kos">)</span>

    <span class="pl-k">return</span> <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">len</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">size</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>

<span class="pl-k">function</span> <span class="pl-en">test</span> <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-en">testWeightBagProblem</span><span class="pl-kos">(</span><span class="pl-kos">[</span><span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">3</span><span class="pl-kos">,</span> <span class="pl-c1">4</span><span class="pl-kos">,</span> <span class="pl-c1">5</span><span class="pl-kos">]</span><span class="pl-kos">,</span> <span class="pl-kos">[</span><span class="pl-c1">15</span><span class="pl-kos">,</span> <span class="pl-c1">20</span><span class="pl-kos">,</span> <span class="pl-c1">30</span><span class="pl-kos">,</span> <span class="pl-c1">55</span><span class="pl-kos">]</span><span class="pl-kos">,</span> <span class="pl-c1">6</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>

<span class="pl-en">test</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">C</h3><a id="user-content-c" class="anchor" aria-label="Permalink: C" href="#c"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-c notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

#define MAX(a, b) (((a) &gt; (b)) ? (a) : (b))
#define ARR_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
#define BAG_WEIGHT 4

void backPack(int* weights, int weightSize, int* costs, int costSize, int bagWeight) {
    // 开辟dp数组
    int dp[weightSize][bagWeight + 1];
    memset(dp, 0, sizeof(int) * weightSize * (bagWeight + 1));

    int i, j;
    // 当背包容量大于物品0的重量时，将物品0放入到背包中
    for(j = weights[0]; j &lt;= bagWeight; ++j) {
        dp[0][j] = costs[0];
    }

    // 先遍历物品，再遍历重量
    for(j = 1; j &lt;= bagWeight; ++j) {
        for(i = 1; i &lt; weightSize; ++i) {
            // 如果当前背包容量小于物品重量
            if(j &lt; weights[i])
                // 背包物品的价值等于背包不放置当前物品时的价值
                dp[i][j] = dp[i-1][j];
            // 若背包当前重量可以放置物品
            else
                // 背包的价值等于放置该物品或不放置该物品的最大值
                dp[i][j] = MAX(dp[i - 1][j],  dp[i - 1][j - weights[i]] + costs[i]);
        }
    }

    printf(&quot;%d\n&quot;, dp[weightSize - 1][bagWeight]);
}

int main(int argc, char* argv[]) {
    int weights[] = {1, 3, 4};
    int costs[] = {15, 20, 30};
    backPack(weights, ARR_SIZE(weights), costs, ARR_SIZE(costs), BAG_WEIGHT);
    return 0;
}"><pre><span class="pl-k">#include</span> <span class="pl-s">&lt;stdio.h&gt;</span>
<span class="pl-k">#include</span> <span class="pl-s">&lt;stdlib.h&gt;</span>
<span class="pl-k">#include</span> <span class="pl-s">&lt;string.h&gt;</span>

<span class="pl-k">#define</span> <span class="pl-en">MAX</span>(<span class="pl-s1">a</span>, <span class="pl-s1">b</span>) (((a) &gt; (b)) ? (a) : (b))
<span class="pl-k">#define</span> <span class="pl-en">ARR_SIZE</span>(<span class="pl-s1">a</span>) (sizeof((a)) / sizeof((a)[0]))
<span class="pl-k">#define</span> <span class="pl-c1">BAG_WEIGHT</span> 4

<span class="pl-smi">void</span> <span class="pl-en">backPack</span>(<span class="pl-smi">int</span><span class="pl-c1">*</span> <span class="pl-s1">weights</span>, <span class="pl-smi">int</span> <span class="pl-s1">weightSize</span>, <span class="pl-smi">int</span><span class="pl-c1">*</span> <span class="pl-s1">costs</span>, <span class="pl-smi">int</span> <span class="pl-s1">costSize</span>, <span class="pl-smi">int</span> <span class="pl-s1">bagWeight</span>) {
    <span class="pl-c">// 开辟dp数组</span>
    <span class="pl-smi">int</span> <span class="pl-s1">dp</span>[<span class="pl-s1">weightSize</span>][<span class="pl-s1">bagWeight</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span>];
    <span class="pl-en">memset</span>(<span class="pl-s1">dp</span>, <span class="pl-c1">0</span>, <span class="pl-k">sizeof</span>(<span class="pl-smi">int</span>) <span class="pl-c1">*</span> <span class="pl-s1">weightSize</span> <span class="pl-c1">*</span> (<span class="pl-s1">bagWeight</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span>));

    <span class="pl-smi">int</span> <span class="pl-s1">i</span>, <span class="pl-s1">j</span>;
    <span class="pl-c">// 当背包容量大于物品0的重量时，将物品0放入到背包中</span>
    <span class="pl-k">for</span>(<span class="pl-s1">j</span> <span class="pl-c1">=</span> <span class="pl-s1">weights</span>[<span class="pl-c1">0</span>]; <span class="pl-s1">j</span> &lt;= <span class="pl-s1">bagWeight</span>; <span class="pl-c1">++</span><span class="pl-s1">j</span>) {
        <span class="pl-s1">dp</span>[<span class="pl-c1">0</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">costs</span>[<span class="pl-c1">0</span>];
    }

    <span class="pl-c">// 先遍历物品，再遍历重量</span>
    <span class="pl-k">for</span>(<span class="pl-s1">j</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span>; <span class="pl-s1">j</span> &lt;= <span class="pl-s1">bagWeight</span>; <span class="pl-c1">++</span><span class="pl-s1">j</span>) {
        <span class="pl-k">for</span>(<span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span>; <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">weightSize</span>; <span class="pl-c1">++</span><span class="pl-s1">i</span>) {
            <span class="pl-c">// 如果当前背包容量小于物品重量</span>
            <span class="pl-k">if</span>(<span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">weights</span>[<span class="pl-s1">i</span>])
                <span class="pl-c">// 背包物品的价值等于背包不放置当前物品时的价值</span>
                <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-s1">dp</span>[<span class="pl-s1">i</span><span class="pl-c1">-</span><span class="pl-c1">1</span>][<span class="pl-s1">j</span>];
            <span class="pl-c">// 若背包当前重量可以放置物品</span>
            <span class="pl-k">else</span>
                <span class="pl-c">// 背包的价值等于放置该物品或不放置该物品的最大值</span>
                <span class="pl-s1">dp</span>[<span class="pl-s1">i</span>][<span class="pl-s1">j</span>] <span class="pl-c1">=</span> <span class="pl-en">MAX</span>(<span class="pl-s1">dp</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">j</span>],  <span class="pl-s1">dp</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">j</span> <span class="pl-c1">-</span> <span class="pl-s1">weights</span>[<span class="pl-s1">i</span>]] <span class="pl-c1">+</span> <span class="pl-s1">costs</span>[<span class="pl-s1">i</span>]);
        }
    }

    <span class="pl-en">printf</span>(<span class="pl-s">"%d\n"</span>, <span class="pl-s1">dp</span>[<span class="pl-s1">weightSize</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span>][<span class="pl-s1">bagWeight</span>]);
}

<span class="pl-smi">int</span> <span class="pl-en">main</span>(<span class="pl-smi">int</span> <span class="pl-s1">argc</span>, <span class="pl-smi">char</span><span class="pl-c1">*</span> <span class="pl-s1">argv</span>[]) {
    <span class="pl-smi">int</span> <span class="pl-s1">weights</span>[] <span class="pl-c1">=</span> {<span class="pl-c1">1</span>, <span class="pl-c1">3</span>, <span class="pl-c1">4</span>};
    <span class="pl-smi">int</span> <span class="pl-s1">costs</span>[] <span class="pl-c1">=</span> {<span class="pl-c1">15</span>, <span class="pl-c1">20</span>, <span class="pl-c1">30</span>};
    <span class="pl-en">backPack</span>(<span class="pl-s1">weights</span>, <span class="pl-en">ARR_SIZE</span>(<span class="pl-s1">weights</span>), <span class="pl-s1">costs</span>, <span class="pl-en">ARR_SIZE</span>(<span class="pl-s1">costs</span>), <span class="pl-c1">BAG_WEIGHT</span>);
    <span class="pl-k">return</span> <span class="pl-c1">0</span>;
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">TypeScript</h3><a id="user-content-typescript" class="anchor" aria-label="Permalink: TypeScript" href="#typescript"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="function testWeightBagProblem(
  weight: number[],
  value: number[],
  size: number
): number {
  /**
   * dp[i][j]: 前i个物品，背包容量为j，能获得的最大价值
   * dp[0][*]: u=weight[0],u之前为0，u之后（含u）为value[0]
   * dp[*][0]: 0
   * ...
   * dp[i][j]: max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]);
   */
  const goodsNum: number = weight.length;
  const dp: number[][] = new Array(goodsNum)
    .fill(0)
    .map((_) =&gt; new Array(size + 1).fill(0));
  for (let i = weight[0]; i &lt;= size; i++) {
    dp[0][i] = value[0];
  }
  for (let i = 1; i &lt; goodsNum; i++) {
    for (let j = 1; j &lt;= size; j++) {
      if (j &lt; weight[i]) {
        dp[i][j] = dp[i - 1][j];
      } else {
        dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
      }
    }
  }
  return dp[goodsNum - 1][size];
}
// test
const weight = [1, 3, 4];
const value = [15, 20, 30];
const size = 4;
console.log(testWeightBagProblem(weight, value, size));"><pre><span class="pl-k">function</span> <span class="pl-en">testWeightBagProblem</span><span class="pl-kos">(</span>
  <span class="pl-s1">weight</span>: <span class="pl-smi">number</span><span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">,</span>
  <span class="pl-s1">value</span>: <span class="pl-smi">number</span><span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">,</span>
  <span class="pl-s1">size</span>: <span class="pl-smi">number</span>
<span class="pl-kos">)</span>: <span class="pl-smi">number</span> <span class="pl-kos">{</span>
  <span class="pl-c">/**</span>
<span class="pl-c">   * dp[i][j]: 前i个物品，背包容量为j，能获得的最大价值</span>
<span class="pl-c">   * dp[0][*]: u=weight[0],u之前为0，u之后（含u）为value[0]</span>
<span class="pl-c">   * dp[*][0]: 0</span>
<span class="pl-c">   * ...</span>
<span class="pl-c">   * dp[i][j]: max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]);</span>
<span class="pl-c">   */</span>
  <span class="pl-k">const</span> <span class="pl-s1">goodsNum</span>: <span class="pl-smi">number</span> <span class="pl-c1">=</span> <span class="pl-s1">weight</span><span class="pl-kos">.</span><span class="pl-c1">length</span><span class="pl-kos">;</span>
  <span class="pl-k">const</span> <span class="pl-s1">dp</span>: <span class="pl-smi">number</span><span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-v">Array</span><span class="pl-kos">(</span><span class="pl-s1">goodsNum</span><span class="pl-kos">)</span>
    <span class="pl-kos">.</span><span class="pl-en">fill</span><span class="pl-kos">(</span><span class="pl-c1">0</span><span class="pl-kos">)</span>
    <span class="pl-kos">.</span><span class="pl-en">map</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">_</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-k">new</span> <span class="pl-v">Array</span><span class="pl-kos">(</span><span class="pl-s1">size</span> <span class="pl-c1">+</span> <span class="pl-c1">1</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">fill</span><span class="pl-kos">(</span><span class="pl-c1">0</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
  <span class="pl-k">for</span> <span class="pl-kos">(</span><span class="pl-k">let</span> <span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-s1">weight</span><span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">;</span> <span class="pl-s1">i</span> <span class="pl-c1">&lt;=</span> <span class="pl-s1">size</span><span class="pl-kos">;</span> <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-s1">value</span><span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
  <span class="pl-kos">}</span>
  <span class="pl-k">for</span> <span class="pl-kos">(</span><span class="pl-k">let</span> <span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span><span class="pl-kos">;</span> <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">goodsNum</span><span class="pl-kos">;</span> <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-k">for</span> <span class="pl-kos">(</span><span class="pl-k">let</span> <span class="pl-s1">j</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span><span class="pl-kos">;</span> <span class="pl-s1">j</span> <span class="pl-c1">&lt;=</span> <span class="pl-s1">size</span><span class="pl-kos">;</span> <span class="pl-s1">j</span><span class="pl-c1">++</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
      <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">weight</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
      <span class="pl-kos">}</span> <span class="pl-k">else</span> <span class="pl-kos">{</span>
        <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-v">Math</span><span class="pl-kos">.</span><span class="pl-en">max</span><span class="pl-kos">(</span><span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span><span class="pl-kos">,</span> <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">j</span> <span class="pl-c1">-</span> <span class="pl-s1">weight</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">]</span> <span class="pl-c1">+</span> <span class="pl-s1">value</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
  <span class="pl-kos">}</span>
  <span class="pl-k">return</span> <span class="pl-s1">dp</span><span class="pl-kos">[</span><span class="pl-s1">goodsNum</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span><span class="pl-s1">size</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>
<span class="pl-c">// test</span>
<span class="pl-k">const</span> <span class="pl-s1">weight</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">3</span><span class="pl-kos">,</span> <span class="pl-c1">4</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
<span class="pl-k">const</span> <span class="pl-s1">value</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-c1">15</span><span class="pl-kos">,</span> <span class="pl-c1">20</span><span class="pl-kos">,</span> <span class="pl-c1">30</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
<span class="pl-k">const</span> <span class="pl-s1">size</span> <span class="pl-c1">=</span> <span class="pl-c1">4</span><span class="pl-kos">;</span>
<span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-en">testWeightBagProblem</span><span class="pl-kos">(</span><span class="pl-s1">weight</span><span class="pl-kos">,</span> <span class="pl-s1">value</span><span class="pl-kos">,</span> <span class="pl-s1">size</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Scala</h3><a id="user-content-scala" class="anchor" aria-label="Permalink: Scala" href="#scala"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-scala notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="object Solution {
  // 01背包
  def test_2_wei_bag_problem1(): Unit = {
    var weight = Array[Int](1, 3, 4)
    var value = Array[Int](15, 20, 30)
    var baseweight = 4

    // 二维数组
    var dp = Array.ofDim[Int](weight.length, baseweight + 1)

    // 初始化
    for (j &lt;- weight(0) to baseweight) {
      dp(0)(j) = value(0)
    }

    // 遍历
    for (i &lt;- 1 until weight.length; j &lt;- 1 to baseweight) {
      if (j - weight(i) &gt;= 0) dp(i)(j) = dp(i - 1)(j - weight(i)) + value(i)
      dp(i)(j) = math.max(dp(i)(j), dp(i - 1)(j))
    }

    // 打印数组
    dp.foreach(x =&gt; println(&quot;[&quot; + x.mkString(&quot;,&quot;) + &quot;]&quot;))

    dp(weight.length - 1)(baseweight) // 最终返回
  }

  def main(args: Array[String]): Unit = {
    test_2_wei_bag_problem1()
  }
}"><pre><span class="pl-k">object</span> <span class="pl-en">Solution</span> {
  <span class="pl-c"><span class="pl-c">//</span> 01背包</span>
  <span class="pl-k">def</span> <span class="pl-en">test_2_wei_bag_problem1</span>()<span class="pl-k">:</span> <span class="pl-en">Unit</span> <span class="pl-k">=</span> {
    <span class="pl-k">var</span> <span class="pl-v">weight</span> <span class="pl-k">=</span> <span class="pl-en">Array</span>[<span class="pl-en">Int</span>](<span class="pl-c1">1</span>, <span class="pl-c1">3</span>, <span class="pl-c1">4</span>)
    <span class="pl-k">var</span> <span class="pl-v">value</span> <span class="pl-k">=</span> <span class="pl-en">Array</span>[<span class="pl-en">Int</span>](<span class="pl-c1">15</span>, <span class="pl-c1">20</span>, <span class="pl-c1">30</span>)
    <span class="pl-k">var</span> <span class="pl-v">baseweight</span> <span class="pl-k">=</span> <span class="pl-c1">4</span>

    <span class="pl-c"><span class="pl-c">//</span> 二维数组</span>
    <span class="pl-k">var</span> <span class="pl-v">dp</span> <span class="pl-k">=</span> <span class="pl-en">Array</span>.ofDim[<span class="pl-en">Int</span>](weight.length, baseweight <span class="pl-k">+</span> <span class="pl-c1">1</span>)

    <span class="pl-c"><span class="pl-c">//</span> 初始化</span>
    <span class="pl-k">for</span> (j <span class="pl-k">&lt;-</span> weight(<span class="pl-c1">0</span>) to baseweight) {
      dp(<span class="pl-c1">0</span>)(j) <span class="pl-k">=</span> value(<span class="pl-c1">0</span>)
    }

    <span class="pl-c"><span class="pl-c">//</span> 遍历</span>
    <span class="pl-k">for</span> (i <span class="pl-k">&lt;-</span> <span class="pl-c1">1</span> until weight.length; j <span class="pl-k">&lt;-</span> <span class="pl-c1">1</span> to baseweight) {
      <span class="pl-k">if</span> (j <span class="pl-k">-</span> weight(i) <span class="pl-k">&gt;=</span> <span class="pl-c1">0</span>) dp(i)(j) <span class="pl-k">=</span> dp(i <span class="pl-k">-</span> <span class="pl-c1">1</span>)(j <span class="pl-k">-</span> weight(i)) <span class="pl-k">+</span> value(i)
      dp(i)(j) <span class="pl-k">=</span> math.max(dp(i)(j), dp(i <span class="pl-k">-</span> <span class="pl-c1">1</span>)(j))
    }

    <span class="pl-c"><span class="pl-c">//</span> 打印数组</span>
    dp.foreach(x <span class="pl-k">=&gt;</span> println(<span class="pl-s"><span class="pl-pds">"</span>[<span class="pl-pds">"</span></span> <span class="pl-k">+</span> x.mkString(<span class="pl-s"><span class="pl-pds">"</span>,<span class="pl-pds">"</span></span>) <span class="pl-k">+</span> <span class="pl-s"><span class="pl-pds">"</span>]<span class="pl-pds">"</span></span>))

    dp(weight.length <span class="pl-k">-</span> <span class="pl-c1">1</span>)(baseweight) <span class="pl-c"><span class="pl-c">//</span> 最终返回</span>
  }

  <span class="pl-k">def</span> <span class="pl-en">main</span>(<span class="pl-v">args</span>: <span class="pl-en">Array</span>[<span class="pl-en">String</span>])<span class="pl-k">:</span> <span class="pl-en">Unit</span> <span class="pl-k">=</span> {
    test_2_wei_bag_problem1()
  }
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Rust</h3><a id="user-content-rust" class="anchor" aria-label="Permalink: Rust" href="#rust"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="pub struct Solution;

impl Solution {
    pub fn wei_bag_problem1(weight: Vec&lt;usize&gt;, value: Vec&lt;usize&gt;, bag_size: usize) -&gt; usize {
        let mut dp = vec![vec![0; bag_size + 1]; weight.len()];
        for j in weight[0]..=weight.len() {
            dp[0][j] = value[0];
        }

        for i in 1..weight.len() {
            for j in 0..=bag_size {
                match j &lt; weight[i] {
                    true =&gt; dp[i][j] = dp[i - 1][j],
                    false =&gt; dp[i][j] = dp[i - 1][j].max(dp[i - 1][j - weight[i]] + value[i]),
                }
            }
        }
        dp[weight.len() - 1][bag_size]
    }
}

#[test]
fn test_wei_bag_problem1() {
    println!(
        &quot;{}&quot;,
        Solution::wei_bag_problem1(vec![1, 3, 4], vec![15, 20, 30], 4)
    );
}"><pre><span class="pl-k">pub</span> <span class="pl-k">struct</span> <span class="pl-smi">Solution</span><span class="pl-kos">;</span>

<span class="pl-k">impl</span> <span class="pl-smi">Solution</span> <span class="pl-kos">{</span>
    <span class="pl-k">pub</span> <span class="pl-k">fn</span> <span class="pl-en">wei_bag_problem1</span><span class="pl-kos">(</span><span class="pl-s1">weight</span><span class="pl-kos">:</span> <span class="pl-smi">Vec</span><span class="pl-kos">&lt;</span><span class="pl-smi">usize</span><span class="pl-kos">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">value</span><span class="pl-kos">:</span> <span class="pl-smi">Vec</span><span class="pl-kos">&lt;</span><span class="pl-smi">usize</span><span class="pl-kos">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">bag_size</span><span class="pl-kos">:</span> <span class="pl-smi">usize</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">usize</span> <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-k">mut</span> dp = <span class="pl-en">vec</span><span class="pl-en">!</span><span class="pl-kos">[</span>vec!<span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">;</span> bag_size + <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">;</span> weight<span class="pl-kos">.</span>len<span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-k">for</span> j <span class="pl-k">in</span> weight<span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span>..=weight<span class="pl-kos">.</span><span class="pl-en">len</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            dp<span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">[</span>j<span class="pl-kos">]</span> = value<span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>

        <span class="pl-k">for</span> i <span class="pl-k">in</span> <span class="pl-c1">1</span>..weight<span class="pl-kos">.</span><span class="pl-en">len</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">for</span> j <span class="pl-k">in</span> <span class="pl-c1">0</span>..=bag_size <span class="pl-kos">{</span>
                <span class="pl-k">match</span> j &lt; weight<span class="pl-kos">[</span>i<span class="pl-kos">]</span> <span class="pl-kos">{</span>
                    <span class="pl-c1">true</span> =&gt; dp<span class="pl-kos">[</span>i<span class="pl-kos">]</span><span class="pl-kos">[</span>j<span class="pl-kos">]</span> = dp<span class="pl-kos">[</span>i - <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span>j<span class="pl-kos">]</span><span class="pl-kos">,</span>
                    <span class="pl-c1">false</span> =&gt; dp<span class="pl-kos">[</span>i<span class="pl-kos">]</span><span class="pl-kos">[</span>j<span class="pl-kos">]</span> = dp<span class="pl-kos">[</span>i - <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span>j<span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">max</span><span class="pl-kos">(</span>dp<span class="pl-kos">[</span>i - <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span>j - weight<span class="pl-kos">[</span>i<span class="pl-kos">]</span><span class="pl-kos">]</span> + value<span class="pl-kos">[</span>i<span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">,</span>
                <span class="pl-kos">}</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
        dp<span class="pl-kos">[</span>weight<span class="pl-kos">.</span><span class="pl-en">len</span><span class="pl-kos">(</span><span class="pl-kos">)</span> - <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">[</span>bag_size<span class="pl-kos">]</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span>

<span class="pl-c1">#<span class="pl-kos">[</span>test<span class="pl-kos">]</span></span>
<span class="pl-k">fn</span> <span class="pl-en">test_wei_bag_problem1</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-en">println</span><span class="pl-en">!</span><span class="pl-kos">(</span>
        <span class="pl-s">"{}"</span><span class="pl-kos">,</span>
        <span class="pl-v">Solution</span><span class="pl-kos">::</span>wei_bag_problem1<span class="pl-kos">(</span>vec!<span class="pl-kos">[</span><span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">3</span><span class="pl-kos">,</span> <span class="pl-c1">4</span><span class="pl-kos">]</span><span class="pl-kos">,</span> vec!<span class="pl-kos">[</span><span class="pl-c1">15</span><span class="pl-kos">,</span> <span class="pl-c1">20</span><span class="pl-kos">,</span> <span class="pl-c1">30</span><span class="pl-kos">]</span><span class="pl-kos">,</span> <span class="pl-c1">4</span><span class="pl-kos">)</span>
    <span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span></pre></div>
<p align="center" dir="auto">
<a href="https://programmercarl.com/other/kstar.html" rel="nofollow">
  <img src="/feinan/leetcode-master/raw/master/pics/网站星球宣传海报.jpg" width="1000" style="max-width: 100%;">
</a>
</p></article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

