CSUOJ 1197- Staginner 买葡萄
2011-11-10 09:17
337 查看
这道题是基础背包问题,我们手里有n块钱,然后求n块钱能买到的最大葡萄个数,价格为j的
一串葡萄有除开j本身外其所有约数之和个葡萄。先将每串葡萄的个数求出来,再用状态转移
方程,dp[i] = max( dp[i], dp[n - j] +w[j])即可,i从n到0。
这代码我觉得自己写的不好...
一串葡萄有除开j本身外其所有约数之和个葡萄。先将每串葡萄的个数求出来,再用状态转移
方程,dp[i] = max( dp[i], dp[n - j] +w[j])即可,i从n到0。
#include<stdio.h> #include<string.h> #define N 26 using namespace std; int w ; int dp ; int max( int a, int b) { return a > b ? a : b; } int f( int n) { int sum = 0; for( int i = 1; i <= n / 2 ; i ++) if( n % i == 0) sum += i; return sum; } void init( ) { for( int i = 2; i <= 25; i ++) { w[i] = f(i); dp[i] = 0; } for( int i = 2; i <= 25; i ++) { for( int j = 2; j <= 25; j ++) { for( int k = i; k >= 0; k --) if( k >= j) dp[k] = max( dp[k], dp[ k - j ] + w[j]); } } } int main() { int n; init(); while( scanf( "%d", &n) != EOF) { printf( "%d\n", dp ); } return 0; }
这代码我觉得自己写的不好...
相关文章推荐
- 1116: Kingdoms+csuoj+暴力枚举+最小生成树
- csuoj1005: Binary Search Tree analog
- CSUOJ 1009 抛硬币
- CSUOJ - 1592石子归并(区间DP)
- CSUOJ 1021 组合数末尾的零 二进制
- CsuOJ 1092(大尾巴狼的朋友)——因为小细节一直在WA...
- CSUOJ 1258 维护序列
- CSUOJ 1093 Caps Lock (CSU Monthly 2012 Aug. C)
- CSUOJ 1600 Twenty-four point (判断24点,另附给出表达式版)
- csuoj 1334: 好老师
- csuoj1303(将循环小数转化为分数)
- CSUOJ 1587 爬楼梯
- CSUOJ 1726 你经历过绝望吗?两次!(BFS + 优先队列)
- CSUOJ 1812 三角形和矩形
- CSUOJ 1341 String and Arrays
- OJ【1197】 约瑟夫问题
- CSUOJ 1541 There is No Alternative
- CSUOJ 1542 线段树解决括号反向问题
- 题目1197:奇偶校验(九度OJ)
- Qz’s Maximum All One Square+csuoj+dp