我有一个 石子合并问题 但是只能做出最大值 最小值求不出来 谁能帮帮忙补下求最小值那段程序啊! 高手们!

我有一个 石子合并问题 但是只能做出最大值 最小值求不出来 谁能帮帮忙补下求最小值那段程序啊! 高手们!,第1张

我实现了一下,经验证是对的。

下面是代码:(希望能给你带来帮助。)

#include <iostream>

#include <fstream>

using namespace std;

static int min = 0, max = 0;//全局变量

//前视声明:

void order(int num, int n);

void addMin(int num, int i);

void addMax(int num, int i, int n);

int main()

{

ifstream fin;

ofstream fout;

finopen("inputtxt");

foutopen("outputtxt");

int n;

fin >> n;

int num = new int[n];

for(int i = 0;i < n;i++)

fin >> num[i];

order(num, n);

for(i = 1;i < n;i++)//注意必须从第二个数开始遍历!

addMin(num, i);

for(i = n-2;i >= 0;i--)//注意必须从倒数第二个数开始遍历!

addMax(num, i, n);

fout << min << endl << max << endl;

return 0;

}

//对数组排序:

void order(int num, int n)

{

int i, j, tem;

for(i = 0;i < n;i++)

{

for(j = i;j < n;j++)

if(num[j] <= num[i])

{

tem = num[i];

num[i] = num[j];

num[j] = tem;

}

}

}

//从前往后累加得到最小值:

void addMin(int num, int i)

{

int j;

for(j = 0;j <= i;j++)

min += num[j];

}

//从后往前累加得到最大值

void addMax(int num, int i, int n)

{

int j;

for(j = i;j < n;j++)

max += num[j];

}

#include <stdioh>

#include <timeh>

#include <stdlibh>

void main()

{

int com,user;

char c;

srand((unsigned)time(NULL)); //初始化随机数,如果没有这条语句,每次运行电脑产生的随机数序列都是一样的

printf("进入游戏\n");

do{

printf("请出拳(1剪刀、2石头、3布):");

scanf("%d",&user);

com=rand()%3+1; //产生1-3范围内的随机数

printf("电脑出%s\n",com==1"剪刀":com==2"石头":"布");

switch(com-user) //用电脑产生的数和用户输入的数的差值来判断胜负

{

case 0:

printf("平手\n");

break;

case 1:

case -2:

printf("电脑赢了\n");

break;

case -1:

case 2:

printf("你赢了\n");

}

printf("继续游戏按Y键、其它键退出");

getchar();

c=getchar();

}while(c=='y' || c=='Y');

printf("已经退出游戏");

}

扩展资料

C++编程: 石头剪子布

#include<cstdio>

#include<iostream>

using namespace std;

int main()

{

int n;

char a[10],b[10];

cin>>n;

int c[n+3];

for(int i=1;i<=n;i++)

{

cin>>a>>b;

if(a[0]=='R')

{

if(b[0]=='R')

{

c[i]=0;

}

if(b[0]=='S')

{

c[i]=1;

}

if(b[0]=='P')

{

c[i]=2;

}

}

else if(a[0]=='S')

{

if(b[0]=='R')

{

c[i]=2;

}

if(b[0]=='S')

{

c[i]=0;

}

if(b[0]=='P')

{

c[i]=1;

}

}

else if(a[0]=='P')

{

if(b[0]=='R')

{

c[i]=1;

}

if(b[0]=='S')

{

c[i]=2;

}

if(b[0]=='P')

{

c[i]=0;

}

}

}

for(int i=1;i<=n;i++)

switch(c[i])

{

case 0:

{

printf("Tie\n");break;

}

case 1:

{

printf("Player1\n");break;

}

case 2:

{

printf("Player2\n");break;

}

}

return 0;

}

1、材料进场时施工单位应通知监理单位对材料进行外观、相关资料(包括材料的合格证,厂家资质、检验报告等)检查。

2、若初步检查符合图纸及技术规范,则施工单位需要在监理单位的见证下进行取样送检。

3、送检后取得检测报告,检测合格后由施工单位对材料进行正式报验,监理单位签字确认后方可在工程上使用。

dp

var

a:array[01000] of longint;

data:array[-1300,-1300] of longint;

f:array[0300,0300] of longint;

ff:array[0300,0300] of longint;

maxans,minans,i,j,k,p,n:longint;

function max(a,b:longint):longint;

begin

if a>b then exit(a);

exit(b);

end;

function min(a,b:longint):longint;

begin

if a<b then exit(a);

exit(b);

end;

begin

readln(n);

for i:=1 to n do

read(a[i]);

for i:=n+1 to 2n do

a[i]:=a[i-n];

fillchar(f,sizeof(f),0);

fillchar(ff,sizeof(ff),0);

for i:=1 to n do

for j:=1 to n do

for k:=1 to j do

inc(data[i,j],a[i+k-1]);

for j:=1 to n do

for i:=1 to n do

for k:=1 to j-1 do

begin

p:=i+k;

if i+k>n then

p:=i+k-n;

f[i,j]:=max(f[i,j],f[i,k]+f[p,j-k]+data[i,k]+data[p,j-k]);

if ff[i,j]=0 then

ff[i,j]:=ff[i,k]+ff[p,j-k]+data[i,k]+data[p,j-k]

else

ff[i,j]:=min(ff[i,j],ff[i,k]+ff[p,j-k]+data[i,k]+data[p,j-k]);

end;

maxans:=0;

minans:=maxlongint;

for i:=1 to n do

begin

maxans:=max(maxans,f[i,n]);

minans:=min(minans,ff[i,n]);

end;

writeln(minans);

writeln(maxans);

end

你的data函数中应该是d=d+sz[i]而不是d=d+i;

你的方程的思路是对的,但是你的实现不对,用rockmax函数实际是用了递归的方法,不是动态规划,这样效率比较低。

建议定义数组RMax[i][j]表示从第i堆到第j堆归并得分最大值,

然后,利用递推公式RMax[i][j]=Max(RMax[i][k]+RMax[k][j],i<=k<=j)+从i堆到j堆石子总重量,这样用三重循环,最外重为每次归并的堆数的循环,从1到所有,第二重为起始堆编号的循环,最内重围上式中k的循环,这样最后的最大的分就是数组RMax[1][N]中的数值,这样计算不像递归那样有大量重复计算。

事先审批后方可进入施工现场—界限清晰,专人管理—通过试验和鉴定—通过计算和充分论证。

工程上使用的所有原材料、半成品、构配件及设备,都必须事先审批后方可进入施工现场;施工现场不能存放与本工程无关或不合格的材料;所有进入现场的原材料与提交的资料在规格、型号、品种、编号上必须一致。

不同种类、不同厂家、不同品种、不同型号、不同批号的材料必须分别堆放,界限清晰,并有专人管理。避免使用时造成混乱,便于追踪工程质量,对分析质量事故的原因也有很大帮助;应用新材料前必须通过试验和鉴定,代用材料必须通过计算和充分论证,并要符合结构构造要求。

扩展资料:

材料进场报验要求规定:

1、在材料、半成品及加工订货进场时,项目质检部负责组织质检员、技术员、施工员参加的联合检查验收。

2、对于设备的进场验证,由项目各专业技术负责人主持。专业工程师进行设备的检查和调试,并填写相关记录。

3、在进行材料、设备的检验工作完成后,相关的内业工作(产品合格证、试验报告、等要求归档的材质证明文件的收集,整理、归档)应及时做到位。

参考资料来源:百度百科-材料检测

随意开采河沙会影响环境,但是砂石的需求量大,应用范围广,制砂代替天然砂已是大势所趋,机制砂的原料丰富,矿石、尾矿、建筑垃圾等都能加工成机制砂,而且制砂工艺方便。开办砂石厂需要下列手续

一、机制砂合法手续

1、工商部门核名

2、国土资源局颁发采矿开采证

3、安全管理局审批

4、环保局测评

5、工商部门处理营业执照手续

6、去税务部门颁发税务登记证

矿石资源如果要开采,一定办理相关手续。但是还有很多投资者如履薄冰,因为担心环保测评不达标,环评通不过就会导致生产手续办不全,许多人在办理手续时都卡在了环保这一关了,因此,投资机制砂生产,通过环评手续是关键。

二、机制砂环评手续流程

1、立项:首先编制制砂项目文件,向当地经济发展局备案。

2、环评:备案后去当地环保局办理环境评估。

3、选定环评机构签订合约,费用视投资金额而定。

4、环保机构的到现场测评,环评内容包括材料、项目设备、材料辅料、周边环境监测(空气、噪声、臭气浓度等),一般环评检测的频次是每天4次,共7天,企业还需对周边居民或单位实现入户调查。

5、环评机构取回入户调查表后会再到周边的居民及单位实现入户调查。

6、调查之后项目投产,申请环保验收。

以上就是关于我有一个 石子合并问题 但是只能做出最大值 最小值求不出来 谁能帮帮忙补下求最小值那段程序啊! 高手们!全部的内容,包括:我有一个 石子合并问题 但是只能做出最大值 最小值求不出来 谁能帮帮忙补下求最小值那段程序啊! 高手们!、用C语言如何编写一个石头剪子布的程序、在建筑工程中,所有原材料如:钢筋、水泥、砂、石子、混凝土等,进场的报验程序是怎样的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9703395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存