我的C++程序错在哪?

来源:百度知道 编辑:UC知道 时间:2024/06/20 02:06:56
//采药
#include<iostream>
using namespace std;
main ()
{
int t,m;
cin>>t>>m;
int a[t+1],b[m+1],c[m+1][t+1];//a:time; b:value
for (int i=1;i<=m;i++)
cin>>a[i]>>b[i];
for (int i=0;i<=m;i++)
c[i][0]=0;
for (int i=0;i<=t;i++)
c[0][i]=0;
for (int i=0;i<=m;i++)for (int j=0;j<=t;j++)c[i][j]=0;
for (int j=1;j<=m;j++)
for (int i=1;i<=t;i++)
{
if (a[j]>i)
{c[j][i]=c[j][i-1];continue;}
if (c[j][i-1]>c[j-1][i-a[j]]+b[i])
c[j][i]=c[j-1][i];
else c[j][i]=c[j-1][i-a[j]]+b[i];
}

cout<<c[m][t];}
1楼说的对,可程序改了还是不对

我知道了,b[j]写成b[i]了

竟然没有分....汗一个
//采药
#include<iostream>
using namespace std;
main ()
{
int t,m;
cin>>t>>m;
int a[t+1],b[m+1],c[m+1][t+1];//a:time; b:value // 定义数组必须用常量,你这样定义不行。实在想用动态的东西,可以用vector,在前面包含#include <vector> ,然后这里改为vector<int> a;a.resize(t + 1);就行了。
for (int i=1;i<=m;i++)
cin>>a[i]>>b[i];
for (int i=0;i<=m;i++)
c[i][0]=0;
for (int i=0;i<=t;i++)
c[0][i]=0;
for (int i=0;i<=m;i++)for (int j=0;j<=t;j++)c[i][j]=0;
for (int j=1;j<=m;j++)
for (int i=1;i<=t;i++)
{
if (a[j]>i)
{c[j][i]=c[j][i-1];continue;}
if (c[j][i-1]>c[j-1][i-a[j]]+b[i])
c[j][i]=c[j-1][i];
else c[j][i]=c[j-1][i-a[j]]+b[i];
}

cout<<c[m][t];}

数组的大小不能用变量。
int a[t+1],b[m+1],c[m+1][t+1];//a:time; b:value
改成
int a[64],b[64],c[64][64];