洛谷试炼场P1616(动态规划,完全背包)

题目连接https://www.luogu.org/problemnew/show/P1616

#include<bits/stdc++.h>
#define N 100009
using namespace std;
int t[10009],c[10009];
int dp[2][N];
int main()
{
	//freopen("t.txt","r",stdin);
	int T,M;
	scanf("%d%d",&T,&M);
	for(int i=0;i<M;i++)
	{
		scanf("%d%d",&t[i],&c[i]);
	}
	for(int i=0;i<M;i++)
	{
		for(int j=0;j<=T;j++)
		{
			if(j>=t[i])
			dp[(i+1)&1][j]=max(dp[i&1][j],dp[(i+1)&1][j-t[i]]+c[i]);
			else
			dp[(i+1)&1][j]=dp[i&1][j];
		}
	}
	int ans=-1;
	for(int i=0;i<=T;i++)
	{
		if(dp[M&1][i]>ans)
		{
			ans=dp[M&1][i];
		}
	}
	printf("%d\n",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39861441/article/details/89787818