在纪中的第二天,2017-7-8 总结:

第一题:
2150. 【2017.7.7普及】和谐数
(File IO): input:a.in output:a.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet

题目描述

给定一个长度为N的序列a,对于每一个数都可选或不选,把选出的数有序组成一个新的序列b,使b序列的“和谐数”最大。
一个序列的和谐数如下定义:对于位置i,如果第奇数次选的则加上bi,偶数次选的则减去bi
注意:新的序列b必须是从左到右依次在a序列选择的,即不能打乱顺序。

输入

输入的第一行是一个n,第二行为n个数,即序列a

输出

输出一行一个整数,即表示最大的和谐数

样例输入

5
1 2 3 4 5

Sample Input2
6
1 3 5 4 6 8

样例输出

5

Sample Output2
9

题意:
选数,选出来最大就好了。
DP再好不过了。

数据范围限制

对于20%的数据,1<=n<=20
对于50%的数据,1<=n<=1000
对于100%的数据,1<=n<=10000000,1<=Ai<=100

var
i,j,k,n,m,l,x,s:longint;
f:array[0..10000001,1..2]of int64;

function max(a,b:longint):longint;
begin
if a>b then exit(a)
else exit(b);
end;

procedure aa;
var
i,j:longint;
begin
for i:=1 to n do
begin
read(x);
f[i,2]:=max(f[i-1,2],f[i-1,1]-x);
f[i,1]:=max(f[i-1,1],f[i-1,2]+x);
end;
end;
begin
assign(input,’a.in’); reset(input);
assign(output,’a.out’);rewrite(output);

readln(n);
aa;
writeln(max(f[n,2],f[n,1]));

close(input);
close(output);
end.

第二题:
其实这题我不是很理解。
质因数分解。然后.(wo).(jiu).(shen).(me).(ye).(bu).(zhi).(dao).(le)…
2151. 【2017.7.7普及】分数
(File IO): input:count.in output:count.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet

题目描述

ProKing来到了家里,忽然发现桌台上有n1个玩偶,每个玩偶上有一个对应的值,而在桌台下也有n2个玩偶,每个玩偶上也有一个对应的值,现在,proking想知道台上的玩偶的默契值除以台下玩偶的默契值得到的既约分数(既约分数就是分子分母最大公约数为1的分数)
默契值定义为所有玩偶的权值的乘积.

输入

输入的第一行是一个n1,后面n1个整数,即序列a;输入的第二行是一个n2,后面n2个整数,即序列b

输出

输出一行两个整数,中间用空格隔开,即表示分子和分母

样例输入

3 1 2 3
4 3 5 2 1

Sample Input2
5 4 6 8 3 2
10 1 2 3 4 5 6 7 8 9 10

样例输出

1 5

Sample Output2
1 3150

数据范围限制

对于20%的数据,n1,n2<=10,Ai,Bi<=10
对于60%的数据,n1,n2<=1000,Ai,Bi<=1000
对于100%的数据,n1,n2<=100000,Ai,Bi<=10000
数据保证不会出现分数的值为0的情况

程(la)序(la):

const max=2300;
mo=100000000;
var n:array[1..2]of int64;
a,s,l:array[0..100101,1..2]of int64;
x,z,y:int64;
i,j,k:longint;
zs:array[0..12624]of int64;

procedure zxs;
var i,x:longint;
begin
for i:=2 to 10000 do
begin
x:=0;
for j:=2 to trunc(sqrt(i)) do
if (i mod j=0) then
begin
zs[i]:=j; x:=j;
break;
end;
if x=0 then zs[i]:=i;
end;
end;

procedure aa;
begin
read(n[1]);
for i:=1 to n[1] do read(a[i,1]);
readln;
read(n[2]);
for i:=1 to n[2] do read(a[i,2]);
zxs;
for i:=1 to 2 do
for j:=1 to n[i] do
begin
x:=a[j,i];
while x>1 do
begin
inc(s[zs[x],i]);
x:=x div zs[x];
end;
end;
for i:=2 to 10000 do
if (s[i,1]>0)and(s[i,2]>0) then
if (s[i,1]>s[i,2]) then begin s[i,1]:=s[i,1]-s[i,2]; s[i,2]:=0; end
else begin s[i,2]:=s[i,2]-s[i,1]; s[i,1]:=0; end;
l[max,1]:=1; l[max,2]:=1;
for i:=1 to 2 do
for j:=2 to 10000 do
begin
z:=s[j,i];
while z>0 do
begin
dec(z);
for k:=2 to max do l[k,i]:=l[k,i]*j;
for k:=max downto 2 do
if l[k,i]>9 then
begin
l[k-1,i]:=l[k-1,i]+l[k,i] div mo;
l[k,i]:=l[k,i] mod mo;
end;
end;
end;
x:=0;
for i:=1 to 2 do
begin
for j:=0 to max do
if l[j,i]>0 then
begin
x:=j;
break;
end;
write(l[x,i]);
for j:=x+1 to max do
begin
y:=l[j,i]; z:=0;
if y=0 then y:=1;
while y

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值