#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<sstream>
using namespace std;
#define L 101
const int N=5,K=7;
int a[L+1]={0,1,2,3,4,5};
int f[L][L];//f[i][j]表示前i个数,对k求余后,余数为j的最大值,题目所求是f[n][0],前n个数,余数为0的最大值
int m;
//设m=a[i]%K;
//j>=m时 f[i][j] = f[i-1][j-m] + a[i]
//j<m时 f[i][j] = f[i-1][K+j-m] + a[i];
int main()
{
f[1][a[1]%K] = a[1];
for(int i=2;i<=N;i++){
m = a[i]%K;
for(int j=0;j<K;j++){
/*if(j>=m) f[i][j] = f[i-1][j-m] + a[i];
else f[i][j] = f[i-1][K+j-m] + a[i]; */
//可选择放 or 不放
f[i][j] = max(f[i-1][j],f[i-1][(K+j-a[i]%K)%K] + a[i]);
}
}
cout << f[N][0];
return 0;
}
//cout << "输入:"
练习3 - 糖果
最新推荐文章于 2022-01-20 20:57:18 发布