首页 > ACM题库 > 九度OJ > 九度-1364-v字仇杀队[解题代码]
2013
12-13

九度-1364-v字仇杀队[解题代码]

题目描述:

         最近玄影游侠看了一部非常好看的电影,叫做《v字仇杀队》。下面是这部电影的主角v

它想说明的一个问题就是,你现在所想的真的是你自己内心所想的吗?还是别人,社会让你这么想的?你要有自己的想法,每个人内心都有自己的准则,你没有必要按照大众的准则去想。

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

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

 

输入:

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

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

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

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

样例输入:
70 3
71 100
69 1
1 2
样例输出:
3

cpp 代码如下:

#include <stdio.h>
int max(int i,int j){
	return i>j ? i:j;
}
int main(){
	int c,n;

	while(scanf("%d %d",&c,&n) != EOF){
		int carr[101] = { 0 }; //炸弹的空间
		int parr[101] = { 0 }; //炸弹的威力
		int s[1000] = { 0 }; //存储当前容量,的最大威力
		for(int i=1; i<=n; i++)
			scanf("%d %d",&carr[i],&parr[i]);
		for(int i=1; i<=n; i++){
			for(int j=c; j>0; j--){
				int t = 0;
				if(j >= carr[i])
					t = s[j-carr[i]] + parr[i];
				s[j] = max(s[j],t);
			}
		}
		printf("%d\n",s[c]);
	}
	return 0;
}
/**************************************************************
	Problem: 1364
	User: coder
	Language: C
	Result: Accepted
	Time:150 ms
	Memory:912 kb
****************************************************************/

 


  1. 第一句可以忽略不计了吧。从第二句开始分析,说明这个花色下的所有牌都会在其它里面出现,那么还剩下♠️和♦️。第三句,可以排除2和7,因为在两种花色里有。现在是第四句,因为♠️还剩下多个,只有是♦️B才能知道答案。

  2. Thanks for using the time to examine this, I truly feel strongly about it and enjoy finding out far more on this subject matter. If achievable, as you achieve knowledge

  3. #include <stdio.h>
    int main()
    {
    int n,p,t[100]={1};
    for(int i=1;i<100;i++)
    t =i;
    while(scanf("%d",&n)&&n!=0){
    if(n==1)
    printf("Printing order for 1 pages:nSheet 1, front: Blank, 1n");
    else {
    if(n%4) p=n/4+1;
    else p=n/4;
    int q=4*p;
    printf("Printing order for %d pages:n",n);
    for(int i=0;i<p;i++){
    printf("Sheet %d, front: ",i+1);
    if(q>n) {printf("Blank, %dn",t[2*i+1]);}
    else {printf("%d, %dn",q,t[2*i+1]);}
    q–;//打印表前
    printf("Sheet %d, back : ",i+1);
    if(q>n) {printf("%d, Blankn",t[2*i+2]);}
    else {printf("%d, %dn",t[2*i+2],q);}
    q–;//打印表后
    }
    }
    }
    return 0;
    }