Jobdu 1462:两船载物问题 - KingEasternSun的专栏 - 博客频道 - CSDN.NET


九度笔记之 1462:两船载物问题 - KingEasternSun的专栏 - 博客频道 - CSDN.NET
给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品。
输入:
输入包含多组测试数据,每组测试数据由若干行数据组成。
第一行为三个整数,n c1 c2,(1 <= n <= 100),(1<=c1,c2<=5000)。
接下去n行,每行一个整数,代表每个物品的重量(重量大小不大于100)。
输出:
对于每组测试数据,若只使用这两艘船可以装下所有的物品,输出YES。
否则输出NO。
样例输入:
3 5 8 6 3 3 3 5 8 5 3 4
样例输出:
NO YES
在一条船上尽可能多的放置货物,然后看剩下的货物另外一条船能否装下。
dp[j]表示容量为j的船只 所能装的最多的货物量,每次考虑一个货物,更新dp[j]
  1. for(int j = smallBoat; j>=boatw[i]; j--){  
  2.     dp[j] = std::max(dp[j],boatw[i]+dp[j-boatw[i]]); 
注意更新dp[j]一定是从高到低更新。原因可参考题目1209:最小邮票数
  1. for(int j = smallBoat; j>=boatw[i]; j--){  
  2.     booldp[j] = booldp[j] || booldp[j-boatw[i]];  
  3. }  
  1. void init(int n){  
  2.     sumw  = 0;  
  3.     for(int i = 1;i<n+1;i++){  
  4.         scanf("%d",boatw+i);  
  5.         sumw+=boatw[i];  
  6.     }  
  7.    
  8. }  
  9. void judge(int n,int smallBoat,int bigBoat){  
  10.    
  11.     if(sumw > smallBoat+bigBoat){  
  12.         printf("NO\n");  
  13.         return;  
  14.     }  
  15.     // *dp = new int[boat1 + 1];  
  16.     memset(dp,0,(smallBoat+1)*sizeof(int));  
  17.     for(int i = 1;i<n+1;i++){  
  18.         for(int j = smallBoat; j>=boatw[i]; j--){  
  19.             dp[j] = std::max(dp[j],boatw[i]+dp[j-boatw[i]]);  
  20.         }  
  21.     }  
  22.    
  23.     if(sumw - dp[smallBoat] <=bigBoat ){  
  24.         printf("YES\n");  
  25.     }else  
  26.         printf("NO\n");  
  27.    
  28. }  

也就是 在给定船只大小smallboat,和货物重量的情况下,哪些实际装载量可以实现。
booldp[j] 为真表示可以实现j个装载量,更新过程如下
  1. for(int j = smallBoat; j>=boatw[i]; j--){  
  2.     booldp[j] = booldp[j] || booldp[j-boatw[i]];  
  3. }  
需要注意的是 booldp[0] 一定要设置为true,因为在船上一个货物都不放,就是0,booldp[0]=true.

算法的时间复杂度与smallboat有关,所以如果两只船只重量相差很大的话,对小船求最大载重可以减少程序时间。
  1. void judgenew(int n,int smallBoat,int bigBoat){//using bool  
  2.    
  3.     if(sumw > smallBoat+bigBoat){  
  4.         printf("NO\n");  
  5.         return;  
  6.     }  
  7.     bool *booldp = new bool[smallBoat + 1];  
  8.     memset(booldp,0,(smallBoat+1)*sizeof(bool));  
  9.     booldp[0] = true;//Attention  must be true  
  10.    
  11.     for(int i = 1;i<n+1;i++){  
  12.         for(int j = smallBoat; j>=boatw[i]; j--){  
  13.             booldp[j] = booldp[j] || booldp[j-boatw[i]];  
  14.         }  
  15.     }  
  16.    
  17.     for(int i = smallBoat;i>=0;i--){  
  18.         if(booldp[i]){  
  19.             if(sumw - i<=bigBoat)  
  20.                 printf("YES\n");  
  21.             else  
  22.                 printf("NO\n");  
  23.             return;  
  24.         }  
  25.     }  
  26. }  
http://www.xuebuyuan.com/1537195.html
 while(~scanf("%d%d%d", &n, &c1, &c2)){
  sum = 0;
  for(i = 1; i <= n; i++){
   scanf("%d", &list[i]);
   sum += list[i];
  }
  memset(dp, 0, sizeof(dp));//初始化dp = 0
  for(i = 1; i <= n; i++)
   for(int j = c1; j >= list[i]; j--)
    dp[j] = dp[j] >= dp[j - list[i]] + list[i] ? dp[j] : dp[j - list[i]] + list[i];
    //寻找在装在j,前i块重物中能容纳的最大,此处有点不容易理解
  puts(dp[c1] + c2 >= sum ? "YES" : "NO");
 }
Read full article from 九度笔记之 1462:两船载物问题 - KingEasternSun的专栏 - 博客频道 - CSDN.NET

Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts