题目大意:农场中原来有X份粮食,每天会有一个动物来,每个动物会在第i天消耗i份粮食,你可以选择接受或者拒绝,求最后能容纳的最多动物数。
题目思路:每个动物消耗的粮食都是定值。。。所以可以直接安装消耗的粮食数进行排序,或者0-1背包处理均可
AC代码:
#include <fstream> #include <algorithm> using namespace std; ifstream fin; ofstream fout; int main() { fin.open("input.txt"); fout.open("output.txt"); int n,x,c[105] = {0},dp[10005] = {0}; fin >> n >> x; for(int i = 1;i<=n;i++) { fin >> c[i]; c[i]*=n+1-i; } for(int i = 1;i<=n;i++) for(int j = x;j>=0;j--) if(j>=c[i]) dp[j] = max(dp[j],1+dp[j-c[i]]); fout << dp[x] << endl; return 0; }