九度笔记之 1364:v字仇杀队

题目1364:v字仇杀队

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:302

解决:109

题目描述:

 v整整策划了一年炸掉英国政府的大楼来推翻独裁统治,在这期间,v遇到了一个问题:如何使用有限的炸弹来达到最大的破坏力。

         看过电影的人都知道,v最后使用自己偷偷建造的一个装满炸药的地铁直接开向国会大厦。虽然v的炸药很多,但是地铁中能装载的炸药数是有限的,因此,v就要挑选一部分炸药。如果换作你,你能在地铁有限的空间中装载挑选出来的炸药使得地铁的破坏力最大吗? 

输入:

         每组测试数据可能有多组输入,对于每一组输入,

         输入的第一行包括两个整数S(1 <= S <= 1000)和C(1<=C<=100),S代表地铁的总空间的大小,C代表v一共存储的炸药的个数。

         接下来的C行每行包括两个1到100(包括1和100)的整数,分别表示这个炸药所需要的空间以及它所能产生的破坏力。

输出:

         对于每组输入,输出只包括一行,这一行只包含一个整数,表示在地铁的有限的空间里转载选出的炸药,能产生的最大的破坏力。如果每个炸药的体积都很大,地铁的空间连一个炸药都装不下,输出0即可。

样例输入:
70 371 10069 11 2
样例输出:
3

算法分析

       背包问题,用动态规划解决 可以参见  九度笔记之 1209最小邮票数

       类似的题目还有 

 普通背包问题
题目1364:v字仇杀队
题目1462:两船载物问题
题目1455:珍惜现在,感恩生活
题目1209:最小邮票数
题目1420:Jobdu MM分水果

项目安排类题目
题目1499:项目安排
题目1463:招聘会
题目1434:今年暑假不AC

资源无限求最大值的题目
题目1494:Dota



源程序

        

//============================================================================
// Name        : judo1364.cpp
// Author      : wdy
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
//similar to 1462
//similar t0 1455
//similar to 1364
#include <iostream>
using namespace std;
void v(int S,int n){
    int *dp = new int[S+1];
    for(int i = 0;i<S+1;i++){
        dp[i]= 0 ;
    }
  
    int space=0;
    int power=0;
    for(int i = 0;i<n;i++){
        std::cin>>space>>power;
        for(int j = S;j>=space;j--){//must decreass
            dp[j] = std::max(dp[j],dp[j-space]+power);
        }
    }
    std::cout<<dp[S]<<std::endl;
}
 void judo(){
    int n;
    int s;
    while(std::cin>>s>>n){
         v(s,n);
    }
    
 }
int main() {
    //cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    judo();
    return 0;
}
  
 
/**************************************************************
    Problem: 1364
    User: KES
    Language: C++
    Result: Accepted
    Time:260 ms
    Memory:1784 kb
****************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值