网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月01日漏签0天
noip吧 关注:25,180贴子:642,055
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 12回复贴,共1页
<<返回noip吧
>0< 加载中...

求助!能量项链,动规题,可是我的程序输出永远是0

  • 只看楼主
  • 收藏

  • 回复
  • steinsga
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我感觉硬改没错,检查了5.6遍,结果输出还是0.。。。。
最坑的是我逐行运行时查看变量,abc这个变量不停的变,我根本没给这个变量赋值啊。。。。
题是rqnoj的第五题,能量项链,我用动规做的
程序见此
求大神帮看看,万分感谢!!!!
var
n,i,j,k,l,m,abc:longint;
a:array[1..201]of longint;
dg:array[1..201,1..201]of longint;
begin
read(n);
for i:=1 to n do
begin
read(a[i]);
a[i+n]:=a[i];
end;
a[2*n+1]:=a[1];
for i:=1 to (n*2+1) do
for j:=1 to (n*2+1) do
dg[i,j]:=0;
for i:=1 to (n-1) do
for j:=1 to n do
begin
abc:=1;
for k:= j to (j+i-1) do
begin
abc:=dg[j,k]+dg[k+1,j+i]+a[j]*a[k+1]*a[j+i+1];
if abc>dg[j,j+i] then
dg[j,j+i]:=abc;
end;
end;
abc:=0;
for i:=1 to n do
begin
if abc<dg[i,i+n] then
abc:=dg[i,i+n];
end;
write(abc);
end.


  • l00oy
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果是a.b.c不断变肯定有大问题


2025-11-01 21:53:43
广告
不感兴趣
开通SVIP免广告
  • isdkfj
  • 进队爷
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可能是数组越界了


  • dxy大神
  • NOI银牌
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主把数组开到500看看


  • steinsga
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我刚开始用的是c,然后用watch查看,f7逐行运行,结果c的值不停地变,都六位数了。。。然后我把变量名换成abc,结果还是不停的变,问下什么时候会出现不对变量赋值而变量的值不停的变的情况
还有,我用f7逐行运行时,运行到a[2*n+1]:=a[1]; (第12行) 这句是,下一步直接到end.(结尾),然后又回去运行for循环,问下这是什么情况啊
还有,我自己发现了一个错误,倒数4.5两行的dg[i,i+n]改成dg[i,i+n-1],不过改完之后输出还是0
@dxy大神
@l00oy
@isdkfj


  • steinsga
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
弄明白了,最后的for循环选最大值出错了,现在的程序能正常输出了
不过我交到rqnoj上,给了我50分。。。。
程序见此
var
n,i,j,k,l,m,x:longint;
a:array[1..201]of longint;
dg:array[1..201,1..201]of longint;
begin
read(n);
for i:=1 to n do
begin
read(a[i]);
a[i+n]:=a[i];
end;
a[2*n+1]:=a[1];
for i:=1 to (n*2+1) do
begin
for j:=1 to (n*2+1) do
dg[i,j]:=0;
end;
for i:=1 to (n-1) do
for j:=1 to n do
begin
for k:= j to (j+i-1) do
begin
x:=(dg[j,k]+dg[k+1,j+i]+(a[j]*a[k+1]*a[j+i+1]));
if x>dg[j,j+i] then
dg[j,j+i]:=x;
end;
end;
x:=dg[1,n];
for i:=2 to n do
begin
if x<dg[i,i+n-1] then
x:=dg[i,i+n-1];
end;
write(x);
end.
大家帮看看为什么是50分。。。。。
谢谢了



  • love_凯deep
  • 进队爷
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
...PASCAL。。。
只有CPP的代码。。
写得丑。。别介意
#include<cstdio>
struct Shadow
{
int head;
int tail;
}q[201];
int f[201][201];
int t;
int n;
int am;
int ans=-9999;
void _init()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&t);
q[i].head=t;
q[i-1].tail=t;
}
q[n].tail=q[1].head;
for(int i=1;i<=n;++i)
q[n+i]=q[i];
am=n<<1;
for(int i=1;i<am;++i)
f[i][i+1]=q[i].head*q[i].tail*q[i+1].tail;
}
int now;
void DP()
{
for(int k=3;k<=n;++k)
{
for(int i=1;i<=n;++i)
{
for(int j=i;j<i+k-1;++j)
{
now=f[i][j]+f[j+1][i+k-1]+q[i].head*q[i+k-1].tail*q[j].tail;
if(now>f[i][i+k-1])
f[i][i+k-1]=now;
}
f[i+n][i+k-1+n]=f[i][i+k-1];
}
}
}
int main()
{
_init();
DP();
for(int i=1;i<=n;++i)
{
if(ans<f[i][i+n-1])
ans=f[i][i-1+n];
}
printf("%d",ans);
return 0;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 12回复贴,共1页
<<返回noip吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示