UVALive 6896 Eureka Theorem(完全背包)
2015-12-15 01:20
344 查看
题意:
问是否恰好3个三角形数的和为n≤1000,三角形数为x=i∗(i+1)2
分析:
数可以重复,完全背包搞搞就好
代码:
问是否恰好3个三角形数的和为n≤1000,三角形数为x=i∗(i+1)2
分析:
数可以重复,完全背包搞搞就好
代码:
// // Created by TaoSama on 2015-12-14 // Copyright (c) 2015 TaoSama. All rights reserved. // //#pragma comment(linker, "/STACK:1024000000,1024000000") #include <algorithm> #include <cctype> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iomanip> #include <iostream> #include <map> #include <queue> #include <string> #include <set> #include <vector> using namespace std; #define pr(x) cout << #x << " = " << x << " " #define prln(x) cout << #x << " = " << x << endl const int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7; int n; bool dp[1005][4]; vector<int> num; void gao() { int sum = 0; num.push_back(0); for(int i = 1; i <= 1000; ++i) { sum += i; if(sum > 1000) break; num.push_back(sum); } } int main() { #ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin); // freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout); #endif ios_base::sync_with_stdio(0); int t; scanf("%d", &t); gao(); while(t--) { scanf("%d", &n); memset(dp, false, sizeof dp); dp[0][0] = true; for(int i = 1; i < num.size(); ++i) for(int j = num[i]; j <= n; ++j) for(int k = 1; k <= 3; ++k) dp[j][k] |= dp[j - num[i]][k - 1]; printf("%d\n", dp [3]); } return 0; }
相关文章推荐
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games
- 01背包问题
- LeetCode之Maximum Product Subarray
- DP Flow