
下面就是源代码:
var
m,t,i,j:longint
f:array[0..1000000]
of
longint
a,b:array[0..600]
of
longint
begin
readln(t,m)
for
i:=1
to
m
do
readln(a[i],b[i])
fillchar(f,sizeof(f),0)
for
i:=1
to
m
do
for
j:=t
downto
a[i]
do
if
f[j]<f[j-a[i]]+b[i]
then
f[j]:=f[j-a[i]]+b[i]
writeln(f[t])
end.
如果乎铅要用文件形式的话就是:
var
m,t,i,j:longint
f:array[0..1000000]
of
longint
a,b:array[0..600]
of
longint
begin
assign(input,'文件名.in'拦宽)
reset(input)
assign(output,'文件名.out')
rewrite(output)
readln(t,m)
for
i:=1
to
m
do
readln(a[i],b[i])
fillchar(f,sizeof(f),0)
for
i:=1
to
m
do
for
j:=t
downto
a[i]
do
if
f[j]<f[j-a[i]]+b[i]
then
f[j]:=f[j-a[i]]+b[i]
writeln(f[t])
close(input)
close(output)
end.
谢谢,祝你好运。
program pairvar m,n,i,j,k,min,low,temp:longint a:array[0..120] of longint b:array[0..15] of longint c:array[0..200006] of integerbegin assign(input,'pair.in') assign(output,'pair.out') reset(input) read(n) m:=n*(n-1) div 2 for i:=0 to m-1 doread(a[i]) for i:=0 to m-2 dofor j:=i 1 to m-1 do if a[i]>a[j] thenbegin temp:=a[i] a[i]:=a[j] a[j]:=temp end min:=a[0] fillchar(c,0,sizeof(c)) for i:=0 to (min div 2) do begin for j:=0 to m-1 doc[a[j]]:=0 for j:=1 to m doinc(c[a[j]]) b[0]:=i b[1]:=a[0]-i now:=1 for j:=2 to n-1 dowhile (now<m) and not(c[a[now]]) do inc(now) if now=m then break b[j]:=a[now]-b[0] for k:=0 to j-1 doif (c[b[k] b[j]]) then dec(c[b[k] b[j]]) else break if k<j then break end writeln(b[i])end.注:对不起,由于百度的撤铅册销缩进,我所敲入的程序原本是有各槐含式的,现在已经被弄得一团糟。铅激笑
题目应该是有附加要求不得读取源文件,因为事实上代码编译后源文件不一定存顷山配在。这个题目挺经典,C语言的版本比较常见,利用了C语言中字符串的一些技雀指巧,如:
#include <stdio.h>
int main() { char *s = "#include <stdio.h>%cint main() { char *s = %c%s%cprintf( s, 10, 34, s, 34 )return 0}"printf( s, 10, 34, s, 34 )return 0}
(注意后唯睁面的main()函数是一个长行)
下面是Pascal版本的:
var a:stringbegin a:='var a:stringbegin a:=writeln(copy(a,1,22),chr(39),a,chr(39),copy(a,23,59))end.'writeln(copy(a,1,22),chr(39),a,chr(39),copy(a,23,59))end.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)