zoukankan      html  css  js  c++  java
  • ECNUOJ 2142 放书

    放书

    Time Limit:1000MS Memory Limit:65536KB
    Total Submit:409 Accepted:173

    Description 

    你要把一叠书放进一些箱子里面,为了节约箱子,你要放尽量多的书到一个箱子里面,但不能超过箱子的重量限制。
    当你把尽量多的书放进一个箱子以后,你把箱子关上,然后用下一个箱子去装书。为了避免麻烦,你只按书堆叠的从上到下的顺序把书放进箱子,也就是说在下面的书不会比上面的书先放进箱子。
    从上到下给你每本书的重量和箱子的能承受的重量,你能求出需要多少个箱子吗?

    Input 

    第一行是一个整数T,表示有T组测试数据。
    每组测试数据的第一行是两个整数n(0<=n<=50),k(1<=k<=1000),表示有n本书,每个箱子的载重上限是k。
    接下来一行有n个整数,表示n本书的重量,从上到下。这n个整数都大于等于1且小于等于k。

    Output 

    对于每组测试数据,输出需要箱子的个数,占一行。

    Sample Input 

    2
    6 10
    5 5 5 5 5 5
    11 12
    12 1 11 2 10 3 4 5 6 6 1

    Sample Output 

    3
    6

    Source

    第一届程序设计竞赛热身赛

    解题:一道dp,dp[i]表示从i开始到最后最小需要几个箱子

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 100;
     4 int d[maxn],dp[maxn];
     5 int main(){
     6     int kase,n,m;
     7     scanf("%d",&kase);
     8     while(kase--){
     9         scanf("%d%d",&n,&m);
    10         for(int i = 0; i < n; ++i){
    11             scanf("%d",d+i);
    12         }
    13         int ret = 0;
    14         memset(dp,0x3f,sizeof dp);
    15         dp[n] = 0;
    16         for(int i = n-1; i >= 0; --i){
    17             int sum = 0;
    18             for(int j = i; j < n; ++j){
    19                 sum += d[j];
    20                 if(sum > m) break;
    21                 dp[i] = min(dp[i],dp[j+1] + 1);
    22             }
    23         }
    24         printf("%d
    ",dp[0]);
    25     }
    26     return 0;
    27 }
    View Code
  • 相关阅读:
    Python实现ftp服务(1)
    MYSQL/HIVESQL笔试题(六):HIVESQL(六)
    Hive基础(16):Hive函数(8) 常用函数
    MYSQL/HIVESQL笔试题(五):HIVESQL(五)
    MYSQL/HIVESQL笔试题(四):HIVESQL(四)
    MYSQL/HIVESQL笔试题(三):HIVESQL(三)
    498. Diagonal Traverse
    493. Reverse Pairs
    1021. Remove Outermost Parentheses
    490. The Maze
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4639070.html
Copyright © 2011-2022 走看看