|洛谷|动态规划|P1156 垃圾陷阱

http://www.luogu.org/problem/show?pid=1156

用布尔数组f[i][j]表示高度为i时体力值为j时的状态存在

然后DP即可

#include
#include
#include
#include
#define ms(i,j) memset(i,j, sizeof i);
using namespace std;
struct ab
{
	int t;
	int f;
	int h;
}G[105];
int d,g;
bool f[405][6005];
bool cmp (const ab &a, const ab &b)
{
	return a.t=0;j--)
	for (int k=s;k>=G[i].t;k--)
	{
		if (f[j][k])
		{
			f[j+G[i].h][k] = true;
			if (j+G[i].h>=d)
			{
				printf("%d\n", G[i].t);
				return 0;
			}
			f[j][k+G[i].f] = true;
		}
	}
	for (int i=s;i>=0;i--)
	{
		if (f[0][i]) {printf("%d\n", i);break;} 
	}
    return 0;
}


转载于:https://www.cnblogs.com/flyinthesky1/p/6384255.html

你可能感兴趣的:(|洛谷|动态规划|P1156 垃圾陷阱)