==//学识有限,此答案纯属娱乐==。=请各位读者慎重把玩、、博主邮箱qfnuxx@126.com
# include <stdio.h>
int main(){
int bottle,Ntime,q,p,i=0,j=0,k=0,sum=0,min,max,red,test;
int Schange=0;//统计消除阻碍花费的能量
int flag;
int zu[50]={0};//使瓶子号从1开始
int backup[50]={0};
int back[50]={0};
int change[51]={0};
int solu[50]={0};
scanf("%d",&bottle);
while(i<bottle){
scanf("%d",&zu[i]);
// printf("%dshi%d\n",i,zu[i]);
i++;
}
i=0;
while(i<bottle){
backup[i]=zu[i];
// printf("%dshi%d\n",i,zu[i]);
i++;
}
i=0;//备份
while(i<bottle){
back[i]=zu[i];
// printf("%dshi%d\n",i,zu[i]);
i++;
}
i=0;//
while(i<bottle){
scanf("%d",&change[i]);
// printf("%dshi%d\n",i,zu[i]);
i++;
}
i=0;
scanf("%d",&Ntime);
printf("numberOFbottles是%d\n",bottle);
printf("总剂是%d\n",Ntime);
while(i<Ntime){
//排序
printf("第%d剂过程\n",i);
// &&j<bottle;
//输入:通过管道命令,将一个包含若干测试用例的文件作为【标准输入流】所以需要来判断测试文件是否读完。
//输出:通过管道命令,将【标准输出流】,输出到一个文件中。
//将程序的【输出文件】与【正确答案文件】进行比对:如果一样,则返回程序正确提示;否则返回程序错误的提示。
while((scanf("%d",&test))!=EOF){ solu[j]=test;
// printf("j是%d\n",j);
j++;}
//配方共j瓶
//排序开始
for(p=0;p<j;p++){
max=p;//初始化
// flag=false;
//bake[p]=sole[q];//选择比较法,由大到小记录瓶号
for(q=p+1;q<j;q++){
if(zu[(solu[q])-1]>zu[(solu[max])-1]){//瓶子号做为下标不能在用backup
max=q;}
}
// k=backup[(solu[p])-1];
// backup[(solu[p])-1]=backup[(solu[max])-1];
// backup[(solu[max])-1]=k;
// printf("backup'第%d个是%d\n",solu[p],backup[(solu[p])-1]);
k=solu[p];
solu[p]=solu[max];
solu[max]=k;//交换了配方里的瓶子号、原change的下标
//博主邮箱qfnuxx@126.com
} //排序完毕
//检验输出瓶子号,由大到小
printf("按阻力值由大到小对瓶子排序\n");
p=0;
while(p<j){
printf("s%d为%d号,",p+1,solu[p]);
printf("阻力值是%d\n",zu[(solu[p])-1]);
p++;
}
/* backup[(solu[q-1])]=backup[(solu[q])];
backup[(solu[q])]=k;
flag=true;}}
if(flag==flase){break;}
}//
for(p=0;p<j;p++)
flag=false;
for(q=j-1;q>p;q--){
if(backup[(solu[q-1])]<backup[(solu[q])]){
k=backup[(solu[q-1])];
backup[(solu[q-1])]=backup[(solu[q])];
backup[(solu[q])]=k;
flag=true;}}
if(flag==flase){break;}
}*/
// printf("该次min:%d\n",min);
// printf("假排序后的免疫伤害\n");
/* p=0;
// while(p<j){
// printf("%d号=%d,",solu[p],change[(solu[p])-1]);
// printf("zu是%d\n",zu[(solu[p])-1]);
p++;
}
*/
min=zu[(solu[0])-1];
Schange=0;//chushihua
for(p=1;p<j;p++){
// printf("change%d:%d\n",solu[p-1],change[(solu[p-1])-1]);
Schange=Schange+change[(solu[p-1])-1];
// printf("min:%d,backup[(solu[p])-1]:%d\n",min,backup[(solu[p])-1]);
if((zu[(solu[p])-1]+Schange)<=min){
min=zu[(solu[p])-1]+Schange;
printf("第%d瓶前的记录需要变动,此次min:%d\n",p+1,min);
red=p;//存住位置
}
}
sum=sum+min;//每一次的最小值
printf("sum:%d,p:%d\n",sum,red);
printf("更新原始的zuli记录\n");
for(q=0;q<red;q++){
zu[(solu[q])-1]=0;//永久变0
}
p=0;
while(p<bottle){//ceshi
printf("%d ,",zu[p]);
p++;
}
printf("\n");
j=0;
i++;
}
printf("%d",sum);
return 0;
}
//上图
--优化后