237 条题解
-
0yjl3567618 LV 8 @ 2009-10-31 17:53:50
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
var i,j,k,n:longint;
a:array[0..1001] of longint;
begin
readln(n);
for i:=1 to n do a[i]:=1;
for i:=1 to n do
for j:=1 to i div 2 do
a[i]:=a[i]+a[j];
writeln(a[n]);
end. -
02009-10-31 17:36:32@
DFS一次搞定
-
02009-10-30 15:02:33@
同一个程序:
第一次 80
第二次 100
无语中~~~~~
太水了 -
02009-10-28 10:36:22@
var
n,i,j:integer;
a:Array[1..1000]of longint;
begin
readln(n);
a[1]:=1;
for i:=2 to n do
begin
a[i]:=1;
for j:=1 to i div 2 do
a[i]:=a[i]+a[j];
end;
writeln(a[n]);
end.
======简单DP===== -
02009-10-25 21:33:38@
var n,pl:longint;
f:array[0..1010] of int64;function search(a:longint):int64;
var ans,k:longint;
begin
if f[a]=0 then begin
ans:=0;
ans:=ans+1;for k:=(a div 2) downto 1 do
ans:=ans+search(k);
search:=ans;
f[a]:=ans;exit;
end else
begin
search:=f[a];
exit;end;
end;begin
read(n);
fillchar(f,sizeof(f),0);writeln(search(n));
end.
不说什么了...... -
02009-10-21 12:56:00@
终于看懂了。
解释一下样例吧。
针对输入的6,有以下几种情况。
6 1·不作任何处理:
3 6 2·茬它的左边加上一个自然数,但该自然数不能超过原数的一半;
2 6 3·加上数后,继续按此规则进行处理,直到不能再立生自然数为止。
1 6
1 3 6
1 2 6
共6种。所以,输出6
又比如: 输入8
则
8
4 8
3 8
2 8
1 8
2 4 8
1 4 8
1 3 8
1 2 8
1 2 4 8共十种,所以输出10。
这样理解题意应该没有问题。
数据貌似比较弱,普通的DFS(深搜)就可以过了。 代码楼下的大牛们都贴了。
-
02009-10-20 17:54:15@
var i,n,j:longint;
d:array[1..1000] of longint;
begin
readln(n);
for i:=1 to n do
d[i]:=1;
for i:=1 to n do
for j:=1 to (i div 2) do
inc(d[i],d[j]);
writeln(d[n]);
end. -
02009-10-19 21:11:59@
好奇怪的题目……
都不知道什么意思……
真不知道为什么有这么高的通过率…… -
02009-10-08 11:58:22@
编译失败...|错误号:217
Fatal: Compilation aborted
An unhandled exception occurred at \(0041D996 :
Exception : Unknown Run-Time error : 112
\)0041D996
\(00447E74
\)0043B450
\(00431A7F
\)004AA3F2
\(0042A5AB
\)0040FB98
$00401776囧死 记录里面给0分 上面那个错误 但本题算AC了。再交同样的,没加通过率,但显示AC…….
记忆化搜索
-
02009-10-05 19:29:51@
var i,n:longint;
a:array[1..10000] of longint;
begin
readln(n);
a[1]:=1;a[2]:=2;a[3]:=2;
for i:=4 to n do
begin
if odd(i) then a[i]:=a
else a[i]:=a+a[i div 2];
end;
writeln(a[n]);
end. -
02009-10-05 13:16:14@
这题啥意思- -可以加上去的方案总数?还是可以加的次数?还是啥?
-
02009-09-27 13:26:57@
program a556;
const maxn= 1000;
var n,i,j:longint;
h:array[1..maxn] of longint;
begin
read(n);
for i:=1 to n do
begin
h[i]:=1;
for j:=1 to i div 2 do inc(h[i],h[j]);
end;
writeln(h[n]);
readln;
readln;
end. -
02009-09-20 18:42:34@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram ex;
var i,j,n:longint;
f:array[0..1000]of longint;procedure doit;
var i,j:longint;
begin
f[0]:=1;
for i:=1 to n do
begin
for j:=0 to (i div 2) do
f[i]:=f[i]+f[j];
end;end;
begin
readln(n);
doit;
writeln(f[n]);
end.这么水
开始我还以为搜索 结果超时。。 -
02009-09-14 21:29:18@
#include
using namespace std;
int s=1;
int Work(int x)
{
if(x/2>=1)
{s=s+x/2;
for(int i=1;i>n;
Work(n);
cout -
02009-10-15 19:58:13@
鄙视这个题目
1.没有说明输出说明 是个数还是……
2.没有说明是否可以重复哪位牛X的,将题目补充一下,让大家都AC下升升AC率……
虽然通过率蛮高诶。
科学研究显示:地球上80%以上是水,vijos也不例外……
-
02009-09-14 14:11:36@
其实……这题可以DP的……
d[i]表示以数字i开始,逐渐往它前面按题目要求添加数字,所能得到的方案总数。
则有d[i]=sigma(d[j])
其中i=2 to n并且j=1 to i/2边界条件:d[i]=1,i=1 to n
最后输出d[n]即可
-
02009-09-12 15:57:58@
纯模拟
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msconst filename='p1130';
var
n,i,j:longint;
ans:int64;
procedure make(n:longint);
var i:longint;
begin
for i:=n div 2 downto 1 do
begin inc(ans); make(i);end;
end;
begin
assign(input,filename+'.in');reset(input);
assign(output,filename+'.out');rewrite(output);
readln(n);
ans:=1;
make(n);
writeln(ans);
close(input);close(output);
end. -
02009-09-09 19:50:51@
鄙视= =、
忘记用longint
高效代码
program p1130;
var s,n:longint;
procedure try(i:longint);
var j:longint;
begin
inc(s);
for j:=1 to i div 2 do
try(j);
end;
begin
//read
readln(n);
s:=0;
try(n);
//write
writeln(s);
end. -
02009-09-05 16:25:11@
//比较高效的代码
var n,i,j:longint;
a:array[0..1200] of longint;
begin
readln(n);
for i:=1 to n do
a[i]:=1;
for i:=2 to n do
for j:=1 to (i div 2) do
a[i]:=a[i]+a[j];
writeln(a[n]);
end.
//若用递归当数据到1000甚至更高时,小心运算会超时 -
02009-09-05 14:58:19@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram p1130;
var tot,q,n:longint;
procedure work(q:longint);
var i:longint;
begin
tot:=tot+1;
for i:=1 to q div 2 do work(i);
end;
begin
readln(n);
tot:=0;
work(n);
writeln(tot);
readln;
end.
其实这个问题并不需要把每一个数都构造出来,那样反而浪费时间,我们只需要用递归来模拟每一位上可加的数字就可以了。