刚学dp的蒻,求指点
查看原帖
刚学dp的蒻,求指点
566903
福明o7楼主2021/10/11 22:35

代码:(附个人理解)

#include<bits/stdc++.h>
using namespace std;
int ti[105];
int v[105];
int dp[105][1005]; 
int main(){
	int t,m;
	scanf("%d %d",&t,&m);
	for (int i=1;i<=m;i++){
		scanf("%d %d",&ti[i],&v[i]);
	}
	for (int i=1;i<=m;i++){//采药编号记录数组 
		for (int j=1;j<=t;j++){//j:时间记录变量;
			if (j>ti[i]){//如果时间够采这第i株草药 
				dp[i][j]=max(dp[i-1][j],dp[i-1][j-ti[i]]+v[i]);//重点! 第一种是不采,i-1继续遍历,第二种采,则i-1,j减去时间加上价值(这是本程序的核心语句,牢记); 
			}
			else{//如果采这株草药的时间不够 
				dp[i-1][j];//直接跳到下一株 
			}
		}
	}
	printf("%d",dp[m][t]);
	return 0;
}

求指点

2021/10/11 22:35
加载中...