提供1个包包,提供贰个手拿包

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int x,y,l,r;
 5 int a[10001];
 6 int numa=1;
 7 int b[1001];
 8 int numb=1;
 9 int qiu(int o)
10 {
11     return o/numa*a[numa]+a[o%numa];
12 }
13 int main()
14 {
15     scanf("%d%d%d%d",&x,&y,&l,&r);
16     for(int i=x;i<=y;i++)
17     {
18         int p=i;
19         numb=1;
20         while(p!=0)
21         {
22             b[numb++]=p%10;
23             p=p/10;
24         }
25         for(int i=numb-1;i>=1;i--)
26         {
27             a[numa++]=b[i];
28         }
29     }
30     numa--;
31     for(int i=1;i<=numa;i++)
32     {
33         a[i]=a[i-1]+a[i];
34     }
35     cout<<qiu(r)-qiu(l-1);// -1是为了方式l号元素数两遍 
36     return 0;
37 }

逾期代码:

20壹七 5一 清北学堂 Day1模拟考试结题报告,day一结题报告

预测分数:100+50+50

实际分数:伍+50+100

=.=

多种托特包

(backpack.cpp/c/pas)

(1s/256M)

题目叙述

提供3个马鞍包,它最多能负载重量为W的物料。

后天交付N种货物:对于第i类货物,1共有Ci件货品;对于每一件物品,重量为Wi,价值为Vi。

寻找壹种装载情势使得双肩包中的货色总价值最大。

输入格式(backpack.in)

率先行四个整数N,W,代表货品的档案的次序与单肩包的总负重。

第3~N+1行,每行多个整数Wi, Vi, Ci,代表第i种货色的轻重、价值与数码。

出口格式(backpack.out)

仅一行,多少个整数V,代表最大的总价值。

样例输入

3 9

5 8 2

3 6 2

2 1 5

样例输出

14

数码范围与范围

1<=N<=20, 0<=W<=1000

1<=Wi<=100, 0<=Vi<=100, 0<=Ci<=100

 1看见那道题的时候,小编立时想到了动态规划全盘手提包难点,但有心无力因为学习动归时期久远+没怎么学好,只好默默地打暴力;

多少范围也挺小,老师的乐趣应该正是让大家强力。。

十几分钟打完暴力,然后本人习于旧贯性的做了几组极端数据改了改小错误就过了,

但是。。。。。。。。

因为自个儿写的想起相比较新鲜。。。、

所以。。。。。。。。

只好过极端数据。。。。

。。。。。。。

自身以致,,被那种水题淹死了,,,

AC 代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<stack>
 6 #include<queue>
 7 #include<algorithm>
 8 using namespace std;
 9 struct node
10 {
11     int w;//重量
12     int v;//价值
13     int num;//数量 
14     int gdnum;
15 }a[40];
16 int n,m;
17 int ans=0;
18 void dfs(int nownum,int nowv,int noww)// 当前 背包编号 价值  重量 
19 {
20     if(nowv>ans&&noww<=m) {ans=nowv;}
21     if(noww>m||nownum>n)return;
22     
23     int p=a[nownum].gdnum;
24 
25     for(int i=0;i<=p;i++)
26     {
27         if(a[nownum].num>0)
28         {
29             a[nownum].num=a[nownum].num-i;
30             dfs(nownum+1,nowv+a[nownum].v*i,noww+a[nownum].w*i);
31             a[nownum].num=a[nownum].num+i;
32         }
33     }
34     
35     
36     //dfs(nownum+1,nowv,noww);
37 }
38 int main()
39 {
40     //freopen("backpack.in","r",stdin);
41     //freopen("backpack.out","w",stdout);
42     
43     scanf("%d%d",&n,&m);
44     
45     for(int i=1;i<=n;i++)
46     {
47         scanf("%d%d%d",&a[i].w,&a[i].v,&a[i].num);
48         a[i].gdnum=a[i].num;
49     }
50         
51     
52     dfs(1,0,0);
53     
54     printf("%d",ans);
55     
56     fclose(stdin);
57     fclose(stdout);
58     return 0;
59 }

循环连串

(circulate.cpp/c/pas)

(1s/256M)

 

主题材料叙述

Iris与Bob在玩游戏:

Alice首先付诸三个数X与Y(X<=Y);

鲍勃则按梯次将X,X+1,X+二,…,Y-一,Y写成1个大数S。

Alice最终将S首尾相连,让其围成2个圈。

那时候,Bob想领会,从S的开始出发,未来的第L到第R数字之和是多少。

输入格式(circulate.in)

第2行八个整数X,Y,L,Rubicon,代表艾丽丝的多个数字和Bob想要知道的第L位到第大切诺基位的数字之和。

出口格式(circulate.out)

仅一行,贰个平头M,代表第L位到第LX570位的数字之和。

样例输入

10 11 4 12

样例输出

7

样例解释

Bob将数字写成1行大数S =
十1一;围成一个圈后,从第伍位到第二2人分别是一,1,0,1,一,壹,0,1,一,它们的和是七.

数据范围与范围

对于50%的数据,L=1, X,Y,L,R<=1000;

对于百分百的数码,S的长短不超越一千0,X,Y,L,安德拉<=一千00000.

 一开始读题有个别懵逼,但想了会儿才意识也不是很难,也正是数额管理相比较麻烦。

于是毅然就起来模拟。。。

而是敲完之后1看数据范围才开掘撑死也就过50%的数量

想了会儿又不曾想出什么好算法来。。。。

so硬着头皮交了份模拟暴力代码

果然->伍17分

正解:

因为从l-r很只怕出现循环总括的气象,所以大家一向求出l和r对于生成字符串的倍数再增加余数就可以

因为在循环总括生成字符串的每一人数字的时候尤其繁琐,所以大家得以做贰个前缀和,那样能够大大下落时间复杂度

过期代码:

ca88亚洲城网站 1TLE

AC代码:

ca88亚洲城网站 2 1
#include<iostream> 2 #include<cstdio> 3 using namespace
std; 4 int x,y,l,r; 5 int a[10001]; 6 int numa=1; 7 int b[1001]; 8
int numb=1; 9 int qiu(int o) 10 { 11 return
o/numa*a[numa]+a[o%numa]; 12 } 13 int main() 14 { 15
scanf(“%d%d%d%d”,&x,&y,&l,&r); 16 for(int i=x;i<=y;i++) 17 { 18 int
p=i; 19 numb=1; 20 while(p!=0) 21 { 22 b[numb++]=p%10; 23 p=p/10; 24 }
25 for(int i=numb-1;i>=1;i–) 26 { 27 a[numa++]=b[i]; 28 } 29 }
30 numa–; 31 for(int i=1;i<=numa;i++) 32 { 33
a[i]=a[i-1]+a[i]; 3四 } 3五 cout<<qiu(r)-qiu(l-1);//
-壹是为着艺术l号成分数五遍 3陆 return 0; 37 } AC

统1游戏

merge.cpp/c/pas

(1s/256M)

主题素材叙述

       Cindy和Dan在玩2个娱乐。

       一上马Cindy想出了N个数,接着她把那N个数全体给了Dan。

      
Dan获得这组数后,它会挑出一个数(要是不足1个则全部挑出)。Dan会把那多少个数加起来形成1个数,然后再把这么些数与剩下的数再放置一同。Dan会一向那样做,直到最后只剩下三个数。

      
Cindy则会在壹侧记下每回Dan获得的数,她把那一个数加起来,作为这次游戏的得分。她想清楚,对于一组数,Dan能获得的最大的得分是不怎么?

输入格式

       第一行叁个正整数N,代表那组数的个数;

       第2行N个正整数,代表那N个整数。

出口格式

       1行3个平头,代表恐怕的最大得分。

样例输入(merge.in)

       4

       3 1 5 6

样例输出(merge.out)

       29

样例解释

       Dan能够率先把(三,五,6)这三个数先统一同来,获得三 + 五 + 陆 = 14;
接着他把多余的三个数再合起来,获得壹 + 1四 = 15.这样,总得分是最大的 14 +
一伍 = 2九.

数码范围与限定

       对于50%的数据,N<=10

       对于百分百的多寡,N<=1000,全部数不超出1000

当小编读完标题标时候,小编就想开了动态规划,想到了堆,想到了贪心,想到了事先队列。。。。

而是哪几个都不会,,,,。。,,。,。,。,。。

so如故随后认为模拟

没悟出最终居然AC了=。=

好狗血。。。。。。

AC代码

ca88亚洲城网站 3 1
#include<iostream> 2 #include<cstdio> 3
#include<cstring> 4 #include<cmath> 5
#include<stack> 6 #include<queue> 7
#include<algorithm> 8 using namespace std; 9 int n; 10 int
a[10001]; 11 int ans=0; 12 int flag=0; 13 int now=0; 14 int comp(const
int &a ,const int & b) 15 { 16 return a>b; 17 } 18 void gett() 19 {
20 now=0; 21 if(a[1]!=-1&&a[2]==-1) 22 { 23 //ans=ans+a[1]; 24
flag=1; 25 return ; 26 } 27 for(int i=1;i<=3;i++) 28 { 29
if(a[i]==-1)continue; 30 now=now+a[i]; 31 a[i]=-1; 32 } 33
ans=ans+now; 34 a[1]=now; 35 sort(a+1,a+n+1,comp); 36 } 37 int main()
38 { 39 freopen(“merge.in”,”r”,stdin); 40
freopen(“merge.out”,”w”,stdout); 41 scanf(“%d”,&n); 42 43 for(int
i=1;i<=n;i++) 44 scanf(“%d”,&a[i]); 45 46 sort(a+1,a+n+1,comp); 47
48 while(flag==0) 49 { 50 gett(); 51 } 52 53 printf(“%d”,ans); 54
fclose(stdin); 55 fclose(stdout); 56 return 0; 57 } AC

 

 

总结:

本次试验,无法说考的很好,因为大家高校有两位大神拿了满分,这些差异相对不是1丁半点的,从思路到代码,从样例到极致数据,他们的力量远远在自己之上

但又不能够说考的很坏,起码未有犯前面三遍考试一样的超低档错误(其实首先个题也犯了次低档错误=.=),也算是1个契机

第叁题爆零(确实不值)

第3题超时(思维太窄)

其3题AC(有点运气)

最少未有出现那种一点思路都尚未纯懵逼的难题,表明自个儿还有升高的半空中

加油!

http://www.bkjia.com/cjjc/1209265.htmlwww.bkjia.comtruehttp://www.bkjia.com/cjjc/1209265.htmlTechArticle2017 51 清北学堂
Day1模拟考试结题报告,day壹结题报告 估摸分数:拾0+50+50
实际分数:伍+50+十0 =.= 多种手提袋 (backpack.cpp/c/pas) (1s/25陆M)
标题叙述…

3 6 2

AC

输入格式(circulate.in)

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<stack> 6 #include<queue> 7 #include<algorithm> 8 using namespace std; 9 struct node10 {11     int w;//重量12     int v;//价值13     int num;//数量 14     int gdnum;15 }a[40];16 int n,m;17 int ans=0;18 void dfs(int nownum,int nowv,int noww)// 当前 背包编号 价值  重量 19 {20     if(nowv>ans&&noww<=m) {ans=nowv;}21     if(noww>m||nownum>n)return;22     23     int p=a[nownum].gdnum;24 25     for(int i=0;i<=p;i++)26     {27         if(a[nownum].num>0)28         {29             a[nownum].num=a[nownum].num-i;30             dfs(nownum+1,nowv+a[nownum].v*i,noww+a[nownum].w*i);31             a[nownum].num=a[nownum].num+i;32         }33     }34     35     36     //dfs(nownum+1,nowv,noww);37 }38 int main()39 {40     //freopen("backpack.in","r",stdin);41     //freopen("backpack.out","w",stdout);42     43     scanf("%d%d",&n,&m);44     45     for(int i=1;i<=n;i++)46     {47         scanf("%d%d%d",&a[i].w,&a[i].v,&a[i].num);48         a[i].gdnum=a[i].num;49     }50         51     52     dfs(1,0,0);53     54     printf("%d",ans);55     56     fclose;57     fclose;58     return 0;59 }

14

壹看见那道题的时候,小编立即想到了动态规划全盘手袋难点,但抓耳挠腮因为学习动归时期久远+没怎么学好,只可以默默地打暴力;

输入格式(backpack.in)

3 6 2

对此百分之百的数码,S的长度不当先壹仟0,X,Y,L,R<=一千00000.

样例输入

1<=N<=20, 0<=W<=1000

数量范围与限定

       Dan能够率先把(三,五,陆)那多少个数先统一同来,获得3 + 伍 + 陆 = 14;
接着她把剩下的多少个数再合起来,获得1 + 1四 = 15.那样,总得分是最大的 1肆 +
1五 = 2九.

merge.cpp/c/pas

出口格式

10 11 4 12

因为在循环总结生成字符串的每种人数字的时候尤其繁琐,所以大家得以做3个前缀和,那样能够大大下落时间复杂度

因为在循环计算生成字符串的每个人数字的时候尤其繁琐,所以大家得以做三个前缀和,那样能够大大下跌时间复杂度

 一看见那道题的时候,小编马上想到了动态规划全盘手拿包难题,但迫于因为学习动归时期久远+没怎么学好,只好默默地打暴力;

样例输出(merge.out)

AC

3 9

数量范围与范围

难题叙述

 

总结:

多种托特包

数码范围与范围

前瞻分数:十0+50+50

此刻,鲍伯想掌握,从S的上马出发,今后的第L到第R数字之和是稍微。

       1行贰个平头,代表恐怕的最大得分。

Iris首先付大多个数X与Y;

首先题爆零(确实不值)

第二行四个整数N,W,代表货色的档案的次序与包包的总负重。

so硬着头皮交了份模拟暴力代码

但是。。。。。。。。

       对于50%的数据,N<=10

果然->4二十分

数码范围与限定

但又无法说考的很坏,起码未有犯眼前二次试验同样的超低等错误(其实首先个题也犯了次低等错误=.=),也好不轻易三个之际

       第3行N个正整数,代表那N个整数。

首先题爆零

输出格式(circulate.out)

1开头Cindy想出了N个数,接着他把那N个数全体给了Dan。

正解:

Cindy则会在两旁记下每一趟Dan获得的数,她把那一个数加起来,作为这次游戏的得分。她想精通,对于壹组数,Dan能博得的最大的得分是多少?

果然->4十八分

输出格式

第一~N+一行,每行两个整数Wi, Vi, Ci,代表第i种货品的分量、价值与数量。

Dan获得那组数后,它会挑出1个数(假使不足三个则整个挑出)。Dan会把那多少个数加起来形成2个数,然后再把这一个数与剩下的数再放手一同。Dan会平昔如此做,直到最终只剩余3个数。

提供二个手拿包,它最多能负载重量为W的物品。

 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int x,y,l,r; 5 int a[10001]; 6 int numa=1; 7 int b[1001]; 8 int numb=1; 9 int qiu(int o)10 {11     return o/numa*a[numa]+a[o%numa];12 }13 int main()14 {15     scanf("%d%d%d%d",&x,&y,&l,&r);16     for(int i=x;i<=y;i++)17     {18         int p=i;19         numb=1;20         while(p!=0)21         {22             b[numb++]=p%10;23             p=p/10;24         }25         for(int i=numb-1;i>=1;i--)26         {27             a[numa++]=b[i];28         }29     }30     numa--;31     for(int i=1;i<=numa;i++)32     {33         a[i]=a[i-1]+a[i];34     }35     cout<<qiu-qiu(l-1);// -1是为了方式l号元素数两遍 36     return 0;37 }

ca88亚洲城网站 4ca88亚洲城网站 5

难题叙述

       3 1 5 6

输入格式

数码范围也挺小,老师的情致应该正是让我们强力。。

其次行N个正整数,代表那N个整数。

这一次试验,不能够说考的很好,因为大家学校有两位大神拿了满分,那个距离相对不是壹丁半点的,从思路到代码,从样例到最棒数据,他们的手艺远远在笔者之上

=.=

寻找壹种装载格局使得马鞍包中的货色总价值最大。

展望分数:100+50+50

so照旧跟着感到模拟

集结游戏

率先行七个整数X,Y,L,BMWX五,代表Alice的三个数字和Bob想要知道的第L位到第Tiguan位的数字之和。

5 8 2

样例输入(merge.in)

仅一行,四个平头V,代表最大的总价值。

没悟出最终居然AC了=。=

(circulate.cpp/c/pas)

样例解释

(1s/256M)

所以。。。。。。。。

所以。。。。。。。。

巡回连串

1<=Wi<=100, 0<=Vi<=100, 0<=Ci<=100

1初叶读题有个别懵逼,但想了1阵子才发觉也不是很难,也正是多少管理相比较麻烦。

样例输入

3 1 5 6

想了壹阵子又从未想出哪些好算法来。。。。

1<=N<=20, 0<=W<=1000

鲍伯将数字写成1行大数S =
拾1一;围成二个圈后,从第5位到第三3个人分别是1,一,0,一,一,一,0,一,一,它们的和是七.

对于50%的数据,L=1, X,Y,L,R<=1000;

当自身读完标题的时候,小编就悟出了动态规划,想到了堆,想到了贪心,想到了事先队列。。。。

首先行二个正整数N,代表那组数的个数;

可是哪二个都不会,,,,。。,,。,。,。,。。

输出格式(backpack.out)

主题材料叙述

本人乃至,,被那种水题淹死了,,,

其3题AC(有点运气)

样例解释

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<stack>
 6 #include<queue>
 7 #include<algorithm>
 8 using namespace std;
 9 int n;
10 int a[10001];
11 int ans=0;
12 int flag=0;
13 int now=0;
14 int comp(const int &a ,const int & b)
15 {
16     return a>b;
17 }
18 void gett()
19 {
20     now=0;
21     if(a[1]!=-1&&a[2]==-1)
22     {
23         //ans=ans+a[1];
24         flag=1;
25         return ;
26     }
27     for(int i=1;i<=3;i++)
28     {
29         if(a[i]==-1)continue;
30         now=now+a[i];
31         a[i]=-1;
32     }
33     ans=ans+now;
34     a[1]=now;
35     sort(a+1,a+n+1,comp);
36 }
37 int main()
38 {
39     freopen("merge.in","r",stdin);
40     freopen("merge.out","w",stdout);
41     scanf("%d",&n);
42     
43     for(int i=1;i<=n;i++)
44     scanf("%d",&a[i]);
45     
46     sort(a+1,a+n+1,comp);
47     
48     while(flag==0)
49     {
50         gett();
51     }
52     
53     printf("%d",ans);
54     fclose(stdin);
55     fclose(stdout);
56     return 0;
57 }

数据范围与范围

样例解释

2 1 5

       对于百分百的多少,N<=一千,全体数不当先壹仟

4

。。。。。。。

鲍勃则按顺序将X,X+一,X+2,…,Y-1,Y写成三个大数S。

(backpack.cpp/c/pas)

多少范围也挺小,老师的情致应该便是让大家强力。。

ca88亚洲城网站 6ca88亚洲城网站 7

第3行四个整数X,Y,L,ENVISION,代表Iris的多少个数字和Bob想要知道的第L位到第奇骏位的数字之和。

好狗血。。。。。。

ca88亚洲城网站 8TLE

没悟出最终居然AC了=。=

对此百分之百的数目,S的长短不超越一千0,X,Y,L,奥迪Q5<=一千00000.

输出格式(backpack.out)

AC代码:

样例解释

Cindy和Dan在玩1个游玩。

第一题超时(思维太窄)

仅壹行,叁个平头M,代表第L位到第普拉多位的数字之和。

样例输入

多种双肩包

自己仍旧,,被那种水题淹死了,,,

样例输入

样例输出(merge.out)

样例输入

 

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<stack> 6 #include<queue> 7 #include<algorithm> 8 using namespace std; 9 int n;10 int a[10001];11 int ans=0;12 int flag=0;13 int now=0;14 int comp(const int &a ,const int & b)15 {16     return a>b;17 }18 void gett()19 {20     now=0;21     if(a[1]!=-1&&a[2]==-1)22     {23         //ans=ans+a[1];24         flag=1;25         return ;26     }27     for(int i=1;i<=3;i++)28     {29         if(a[i]==-1)continue;30         now=now+a[i];31         a[i]=-1;32     }33     ans=ans+now;34     a[1]=now;35     sort(a+1,a+n+1,comp);36 }37 int main()38 {39     freopen("merge.in","r",stdin);40     freopen("merge.out","w",stdout);41     scanf("%d",&n);42     43     for(int i=1;i<=n;i++)44     scanf("%d",&a[i]);45     46     sort(a+1,a+n+1,comp);47     48     while(flag==0)49     {50         gett();51     }52     53     printf("%d",ans);54     fclose;55     fclose;56     return 0;57 }

2 1 5

ca88亚洲城网站,对于50%的数据,N<=10

(1s/256M)

ca88亚洲城网站 9ca88亚洲城网站 10

数码范围与范围

so照旧随即认为模拟

仅一行,1个平头M,代表第L位到第纳瓦拉位的数字之和。

于是毅然就起来模拟。。。

联合游戏

正解:

样例输出

实在分数:伍+50+100

标题叙述

只好过极端数据。。。。

       4

(backpack.cpp/c/pas)

       第二行贰个正整数N,代表那组数的个数;

当作者读完标题标时候,笔者就想开了动态规划,想到了堆,想到了贪心,想到了先行队列。。。。

巡回类别

最少未有出现那种一点思路都不曾纯懵逼的标题,表明本身还有进步的长空

 1从头读题某些懵逼,但想了1阵子才意识也不是很难,也便是多少处理比较麻烦。

主题材料叙述

只是敲完事后1看数据范围才发觉撑死也就过2/四的数额

1<=Wi<=100, 0<=Vi<=100, 0<=Ci<=100

首先行七个整数N,W,代表货色的种类与单肩包的总负重。

出口格式(circulate.out)

Iris与鲍勃在玩游戏:

因为从l-r很恐怕现身循环总结的情况,所以大家一向求出l和r对于生成字符串的倍数再加上余数就可以

 

对于百分之百的多少,N<=一千,全体数不凌驾一千

因为从l-r很恐怕出现循环总结的情状,所以大家一贯求出l和r对于生成字符串的倍数再增加余数就可以

ca88亚洲城网站 11ca88亚洲城网站 12

      
Cindy则会在一侧记下每趟Dan获得的数,她把那几个数加起来,作为这一次游戏的得分。她想领悟,对于1组数,Dan能获得的最大的得分是稍稍?

7

=.=

样例输出

merge.cpp/c/pas

艾丽丝与Bob在玩游戏:

今天付出N种货物:对于第i类物品,一共有Ci件货物;对于每一件物品,重量为Wi,价值为Vi。

输入格式(circulate.in)

但是。。。。。。。。

第二~N+一行,每行多个整数Wi, Vi, Ci,代表第i种货色的分量、价值与数码。

ca88亚洲城网站 13TLE

而是哪三个都不会,,,,。。,,。,。,。,。。

总结:

29

       辛迪和Dan在玩一个游乐。

仅一行,二个平头V,代表最大的总价值。

输入格式

好狗血。。。。。。

(1s/256M)

AC

3 9

想了少时又尚未想出什么样好算法来。。。。

足足未有现身那种一点思路都不曾纯懵逼的题材,表达自个儿还有升高的半空中

第三题AC

AC 代码:

今天交付N种货物:对于第i类货色,一共有Ci件货物;对于每一件货色,重量为Wi,价值为Vi。

5 8 2

。。。。。。。

样例输出

一行八个整数,代表只怕的最大得分。

阿丽丝最终将S首尾相连,让其围成二个圈。

这一次试验,无法说考的很好,因为我们高校有两位大神拿了满分,这几个出入绝对不是1丁半点的,从思路到代码,从样例到最棒数据,他们的力量远远在作者之上

10 11 4 12

Dan能够率先把那四个数先统一同来,得到3 + 伍 + 6 = 1四;
接着他把剩余的五个数再合起来,得到一 + 14 = 15.这么,总得分是最大的 1四 +
①5 = 29.

       29

输入格式(backpack.in)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<stack>
 6 #include<queue>
 7 #include<algorithm>
 8 using namespace std;
 9 struct node
10 {
11     int w;//重量
12     int v;//价值
13     int num;//数量 
14     int gdnum;
15 }a[40];
16 int n,m;
17 int ans=0;
18 void dfs(int nownum,int nowv,int noww)// 当前 背包编号 价值  重量 
19 {
20     if(nowv>ans&&noww<=m) {ans=nowv;}
21     if(noww>m||nownum>n)return;
22     
23     int p=a[nownum].gdnum;
24 
25     for(int i=0;i<=p;i++)
26     {
27         if(a[nownum].num>0)
28         {
29             a[nownum].num=a[nownum].num-i;
30             dfs(nownum+1,nowv+a[nownum].v*i,noww+a[nownum].w*i);
31             a[nownum].num=a[nownum].num+i;
32         }
33     }
34     
35     
36     //dfs(nownum+1,nowv,noww);
37 }
38 int main()
39 {
40     //freopen("backpack.in","r",stdin);
41     //freopen("backpack.out","w",stdout);
42     
43     scanf("%d%d",&n,&m);
44     
45     for(int i=1;i<=n;i++)
46     {
47         scanf("%d%d%d",&a[i].w,&a[i].v,&a[i].num);
48         a[i].gdnum=a[i].num;
49     }
50         
51     
52     dfs(1,0,0);
53     
54     printf("%d",ans);
55     
56     fclose(stdin);
57     fclose(stdout);
58     return 0;
59 }

so硬着头皮交了份模拟暴力代码

但又无法说考的很坏,起码未有犯前边3次考试同样的超低档错误(其实首先个题也犯了次低端错误=.=),也终于2个关键

210分钟打完暴力,然后我习贯性的做了几组极端数据改了改小错误就过了,

对于50%的数据,L=1, X,Y,L,R<=1000;

AC 代码:

AC代码

加油!

鲍伯则按顺序将X,X+壹,X+二,…,Y-一,Y写成2个大数S。

寻找1种装载方式使得双肩包中的货物总价值最大。

此时,鲍伯想知道,从S的启幕出发,以后的第L到第R数字之和是不怎么。

提供叁个公文包,它最多能负载重量为W的货物。

骨子里分数:5+50+100

(circulate.cpp/c/pas)

只可以过极端数据。。。。

样例输出

AC代码:

Alice最终将S首尾相连,让其围成二个圈。

因为自个儿写的追忆比较新鲜。。。、

Bob将数字写成1行大数S =
十1一;围成1个圈后,从第陆位到第一二人分别是一,1,0,一,1,一,0,壹,1,它们的和是7.

7

14

       一齐始Cindy想出了N个数,接着他把这N个数全体给了Dan。

因为作者写的回顾相比较新鲜。。。、

      
Dan得到那组数后,它会挑出二个数(如若不足一个则全体挑出)。Dan会把那多少个数加起来变成多少个数,然后再把那些数与剩下的数再放置一起。Dan会一直如此做,直到最后只剩余八个数。

第一题超时

阿丽丝首先付诸七个数X与Y(X<=Y);

只是敲完之后壹看数量范围才开掘撑死也就过四分之二的数额

难点叙述

AC代码

二一分钟打完暴力,然后作者习于旧贯性的做了几组极端数据改了改小错误就过了,

于是一挥而就就从头模拟。。。

AC

加油!

逾期代码:

相关文章