1323 条题解
-
0894844523 LV 8 @ 2009-09-02 19:32:12
【思路】 by cjf00000
此题考查动态规划思想
首先我们需要把输入字符转换为数字a,b 然后使用动态规划求解A+B的值 最后输出答案
我们可以设计出如下DP方程
令f[j]表示i+j的值 则有
1. f[0][0]=0
2. f[j]=max
3. { f[j]+1,
4. f[i][j-1]+1 }
由于对于每个i,j我们都要计算出f[j],因此时间复杂度与空间复杂度都为O(n^2)
但是 对于题目提供的最大数字n=32767明显超时!
【优化1】by wusu5545
对于DP方程 由于每次计算只需要f[j]或f[j-1]
因此我们可以使用滚动数组优化DP的空间复杂度
使用两个整数x,y分别保存f[j]与f[j-1]
空间复杂度降为O(2) 然而时间复杂度O(n^2)仍然超时!
“时间复杂度,到目前为止还没有更好的优化方法。因此,此题被称为史上最难的dp题!”
【优化2】by 匿名大牛
对于整数的运算 我们可以利用位运算的思想简化复杂度
题目显然要我们求两非负整数之和。
我们知道,在非负整数加法的二进制逻辑运算中,每一位上的结果取决于以下两方面:
1、本位上两个逻辑位的异或值
2、后一位的结果是否溢出
利用这种性质,可以考虑如下做法:
令f[j]表示,考虑两个加数的后i、j位相加的结果,显然有以下状态转移方程
1. f[j]= max
2. { f[i][j-1]+y & (1 -
02009-07-25 09:42:45@
var
a,h,i,j,k,l:integer;
b:array[1..100] of string;
c,d,e:array[1..100] of integer;
f,g:array[1..100] of char;
m:array[1..101] of longint;
begin
readln(a);
for h:=1 to a do
readln(b[h]);
for h:=1 to a do
begin
i:=1;
b[h]:=b[h]+' ';
while b[h,i]' ' do
i:=i+1;
j:=i-1;
i:=i+1;
while b[h,i]' ' do
begin
c[h]:=c[h]*10+ord(b[h,i])-48;
i:=i+1;
end;
i:=i+1;
while b[h,i]' ' do
begin
d[h]:=d[h]*10+ord(b[h,i])-48;
i:=i+1;
end;
i:=i+1;
f[h]:=b[h,i];
i:=i+2;
g[h]:=b[h,i];
i:=i+2;
while b[h,i]' ' do
begin
e[h]:=e[h]*10+ord(b[h,i])-48;
i:=i+1;
end;
b[h]:=copy(b[h],1,j);
end;
i:=0;
for h:=1 to a do
begin
if (c[h]>80) and (e[h]>0) then
m[h]:=m[h]+8000;
if (c[h]>85) and (d[h]>80) then
m[h]:=m[h]+4000;
if c[h]>90 then
m[h]:=m[h]+2000;
if (c[h]>85) and (g[h]='Y') then
m[h]:=m[h]+1000;
if (d[h]>80) and (f[h]='Y') then
m[h]:=m[h]+850;
m[101]:=m[101]+m[h];
if m[h]>i then
begin
i:=m[h];
j:=h;
end;
end;
writeln(b[j]);
writeln(i);
writeln(m[101]);
end.
这是1001 -
02009-07-24 14:58:27@
var
a,b,c:word;
begin
read(a,b);
c:=a+b;
write(c);
end.
终于AC了 交了五次..我叫张信豪。。谢谢..
-
02009-07-24 11:18:14@
program ayqzwu110;
var a,b:longint;
begin
readln(a,b);
writeln(a+b);
end. -
02009-07-24 10:11:05@
program ab;
var a,b:longint;
begin
read(a,b);
write(a+b);
end. -
02009-07-25 10:52:17@
var
a,h,i,j,k,l:integer;
b:array[1..100] of string;
c,d,e:array[1..100] of integer;
f,g:array[1..100] of char;
m:array[1..101] of longint;
begin
readln(a);
for h:=1 to a do
readln(b[h]);
for h:=1 to a do
begin
i:=1;
b[h]:=b[h]+' ';
while b[h,i]' ' do
i:=i+1;
j:=i-1;
i:=i+1;
while b[h,i]' ' do
begin
c[h]:=c[h]*10+ord(b[h,i])-48;
i:=i+1;
end;
i:=i+1;
while b[h,i]' ' do
begin
d[h]:=d[h]*10+ord(b[h,i])-48;
i:=i+1;
end;
i:=i+1;
f[h]:=b[h,i];
i:=i+2;
g[h]:=b[h,i];
i:=i+2;
while b[h,i]' ' do
begin
e[h]:=e[h]*10+ord(b[h,i])-48;
i:=i+1;
end;
b[h]:=copy(b[h],1,j);
end;
i:=0;
for h:=1 to a do
begin
if (c[h]>80) and (e[h]>0) then
m[h]:=m[h]+8000;
if (c[h]>85) and (d[h]>80) then
m[h]:=m[h]+4000;
if c[h]>90 then
m[h]:=m[h]+2000;
if (c[h]>85) and (g[h]='Y') then
m[h]:=m[h]+1000;
if (d[h]>80) and (f[h]='Y') then
m[h]:=m[h]+850;
m[101]:=m[101]+m[h];
if m[h]>i then
begin
i:=m[h];
j:=h;
end;
end;
writeln(b[j]);
writeln(i);
writeln(m[101]);
end.
1001的题解!!!!! -
02009-07-23 16:28:56@
program ex_1;
var
a,b:longint;
begin
read(a+b);
writeln(a+b);
readln;
end. -
02009-07-23 11:36:19@
program ex1;
var
a,b:longint;
begin
read(a,b);
write(a+b);
end. -
02009-07-22 18:22:16@
hgdh dfhdfhdfh
-
02009-07-21 14:16:30@
#include
main()
{
int x,y,z;
scanf("%d%d",&x,&y);
z=x+y;
printf("%d",z);
} -
02009-07-21 11:58:17@
此题实质上非常复杂 全面考察到了数学史和计算机史 经典代数 常用计算与输入输出等等等等知识点考虑到题目的所有可能性 我们应当从计算机存储的二进制的角度来逐步考虑数的表示以字节计数,采用多字节合用的方式表示一个大整数如今已经是高级程序语言编译器轻松可以达到的目标 可是为了加强对计算机计数的了解此题可以考虑仍以最原始的方式进行计算——并且考虑最终将二进制数转变为十进制输出的全部过程 期间还考察了对ASCII码的熟悉程度此题实在经典 乃居家旅行必备之良题
-
02009-07-20 20:29:21@
#include
int main(){
long long a,b,m;
scanf ("%d%d",&a,&b);
m=a+b;
printf ("%d",m);
} -
02009-07-20 13:55:06@
var i,x,y:integer;
begin
read(x,y)
i:=x+y;
write(i);
end. -
02009-07-19 18:15:29@
#include
int main()
{
int x,y;
scanf("%d%d",&x,&y);
x=x+y;
printf("%d",x);}
-
02009-07-19 17:11:51@
我本将心向明月···
-
02009-07-19 15:47:42@
program lbx;
var a,b:longint;
begin
readln(a,b);
writeln(a+b);
end. -
02009-07-19 14:25:54@
writeln(a+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b); div ( )
-
02009-07-18 19:58:30@
program lbx;
var a,b:longint;
begin
readln(a,b);
writeln(a+b);
end. -
02009-07-18 18:23:27@
#include
int main()
{
int x,y;
scanf("%d%d",&x,&y);
x=x+y;
printf("%d",x);}
-
02009-07-17 19:48:01@
var a,b:longint;
begin
readln(a,b);
write(a+b);
end.
信息
- ID
- 1000
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 74446
- 已通过
- 28492
- 通过率
- 38%
- 被复制
- 223