Comet OJ - Contest #11 B题 usiness
###题目链接### 题目大意: 一开始手上有 0 个节点,有 n 天抉择,m 种方案,在每天中可以选择任意种方案、任意次地花费 x 个节点(手上的节点数不能为负),使得在 n 天结束后,获得 y 个节点。 其次,在每天结束后,会根据自己手上所具有的节点数来获得一些节点,设当天结束后所拥有 x 个节点,那么将获得 f(x) 个节点。 分析: 1、将全过程分为 n 天,每天开始有一定的节点数,然后 DP 求得花费后的最大价值(这个最大价值指的是,n 天结束后仅返还获得的最大节点数)。 故设 dp[i][j] 表示在第 i 天花费操作完后,所能在最后一天返还节点数的最大值。 2、很显然这是一个完全背包问题。在 DP 处理每天话费节点之前,需要更新当天最开始所拥有的节点数所代表的 价值 (即结束返还的总节点数)。而当天一开始的节点数由上一天末尾所持有的节点数 x + 上一天结束后获得的节点数 f(x) 。 故枚举上一天结束后所持有的节点数 j ,则有: d p[i][j+f[j]]=max( dp[i][j+f[j]] , dp[i-1][j] ) 。 直接枚举物品数: #include<iostream> #include<algorithm> #include<string.h> using namespace std; int n,m,k; int s[1008]; int dp