国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

算法提高 拿糖果 線性DP

2019-11-08 01:45:36
字體:
來源:轉載
供稿:網友

     題目鏈接:拿糖果

   思路:首先給小于根號n的素數打表。d(i)表示當前剩余i顆糖,最多可以拿到多少糖。

    轉移方程:d(i) = max(d(i), k + d(i - 2 * k)),此處k表示她可以從i顆糖中拿的糖數量,即k是素數并且i % k == 0。

    注意:媽媽可以拿的糖的數量如果不足P,則拿糖結束。

AC代碼:

#include <cstdio>#include<cmath>#include <algorithm>#include <cstring>#include <utility>#include <string>#include <iostream>#include <map>#include <set>#include <vector>#include <queue>#include <stack>using namespace std;#define eps 1e-10#define inf 0x3f3f3f3f#define PI pair<int, int> const int maxn = 1e5 + 5;int vis[500], d[maxn];void init(int n) {	//vis[i] = 0表示是素數 	int m = sqrt(n + 0.5);	memset(vis, 0, sizeof(vis));	for(int i = 2; i <= m; ++i) if(!vis[i])		for(int j = i*i; j <= n; j += i) vis[j] = 1;}int dfs(int n) {	if(d[n]) return d[n];	if(n <= 3) return d[n] = 0;	int m = sqrt(n);	for(int i = 2; i <= m; ++i) {		if(!vis[i] && n % i == 0) { //質因數 			d[n] = max(d[n], i + dfs(n - 2*i));		}	}	return d[n];}int main() {	init(500);	int n;	while(scanf("%d", &n) == 1) {		memset(d, 0, sizeof(d));		PRintf("%d/n", dfs(n));	}	return 0;} 如有不當之處歡迎指出!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北碚区| 茂名市| 南陵县| 鹤岗市| 丰县| 新竹市| 化隆| 临高县| 民丰县| 大丰市| 定远县| 上犹县| 天峻县| 兴海县| 石棉县| 临颍县| 新野县| 扎兰屯市| 平乡县| 墨脱县| 东宁县| 巴中市| 收藏| 山东省| 晴隆县| 海安县| 周宁县| 土默特右旗| 北安市| 全南县| 石城县| 盐城市| 苏尼特左旗| 凤凰县| 石泉县| 赫章县| 盐城市| 民县| 和平区| 乳山市| 鸡泽县|