值得提及的是题目没有给出数据范围,水过的都默认工人数目不超过1000。
我给出了n*n*n的算法,针对工人数目任意的情况。
首先,可以判断的是,每次决策之后的工人数量,肯定和从当前月开始的之后某个月的工人数量相同
如要hire,则当hire足够;如要fire,则当fire到底;
如此就可以应离散化的方法了,n*n*n。转移为o(n)
#include#include #include #include #include #include using namespace std; #define N 15 int dp[N][N]; int hire,sala,fire; int num[N]; int disf[N]; int pos[N]; int main() { int i,j,k,n,tmp; while(~scanf("%d",&n) && n) { scanf("%d%d%d",&hire,&sala,&fire); for(i=0;i