遇到的问题和经验总结:
1.b【i】对应单元i
2.写printf总是带上&的失误(不过容易发现解决问题)
3.求解b【i】的函数的返回值总是写错*******重点注意,这个问题极其不易发现
对本阶段动态规划做过的题目进行思路总结:
1.先在本子上把问题画出来
2.确定b【i】中存的值是什么,这是解决问题的关键
3.程序大概框架
定义关键的全局数组和变量。
main函数输入输出和大致功能。
b【i】求解函数——f(i):
转移方程b【i】=f();
边界条件
最后返回b【i】
#include<stdio.h>
int n,m;
int a[100][100]={0,0};//吃食关系
int b[100]={0};//从当前出发的最大链数
int beichi[100]={0};//用于判断是否为最顶端的消费者
int foodchain(int i);
int main(){
int i,x,y;
scanf("%d %d",&n,&m);//n为生物总数,m为吃食关系
for(i=1;i<=m;i++){
scanf("%d %d",&x,&y);
a[x][y]=1;
beichi[y]=1;//被吃赋值唯一,循环过后值为零的对应着最顶端的消费者
}
int sum=0;
for(i=1;i<=n;i++){//最顶端的链数求和
if(beichi[i]==0)
sum+=foodchain(i);
}
printf("%d",sum);
return 0;
}
int foodchain(int i){
if(b[i]!=0)
return b[i];
int j;
int sum=0;
for(j=1;j<=n;j++){
if(a[i][j]==1)
sum+=foodchain(j);
}
if (sum==0)
b[i]=1;
else
b[i]=sum;
return b[i];//****返回值写错导致浪费大量时间纠错,返回值为最后判断条件的b[i]****
}