楼主: newkid

[精华] 发现一位专门用SQL解各种谜题的高人!

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
91#
发表于 2012-8-13 07:38 | 只看该作者
[ 本帖最后由 〇〇 于 2012-8-13 07:38 编辑 ]

〇〇 发表于 2012-8-13 07:36
How to simulate DML Operations on XML data using XU (XQuery Update)
How to validate XML data using  ...

uva 674 - Coin Change
分类: ACM----动态规划 2012-08-13 01:02 128人阅读 评论(0) 收藏 举报
点击打开链接




题目意思: 有5种硬币 1 , 5 , 10  , 25  , 50 ,现在给我们一个数n,求用这5种硬币组成和为n的总方案数是多少




解题思路:   动态规划
                     1:如果硬币只由1分组成,那么总方案数就是1
                     2:如果硬币由1和5组成,那么总方案数就是1+s1 (s1为1和5组成的方案)
                     .
                     .
                     .
                    6:如果硬币由1,5,10,25,50组成,那么总方案数就是1+s1+s2+s3+s4+s5
                    题目给出的数据n最大为7489,那么我们采用的是先把所有的值的拆分的总方案数求出来(也就是打表),然后输入一个我么直接输出即可。
                    思路:我们用type[5]数组存储5种硬币,设dp[j]表示用前i+1种(type[0]....type)组成价值为j的总方案数,那么我么就可以直接两重循环去枚举每一个价值j,求出所有的数据,最后查找输出。





代码:


[cpp] view plaincopyprint?//(没有优化)   
#include <algorithm>   
#include <iostream>   
#include <cstring>   
#include <string>   
#include <vector>   
#include <cstdio>   
#include <stack>   
#include <queue>   
#include <cmath>   
using namespace std;  
#define MAXN 8000   
  
int type[5] = {1,5,10,25,50};  
int dp[5][MAXN];//用int类型即可,如果MAXN上万要用unsigned long long   
int n , ans;  
  
//打表处理好所有的数据   
void solve(){  
    for(int i  = 0 ; i < 5 ; i++){  
        for(int j = 0 ; j < MAXN ; j++){  
            if(i == 0 || j == 0) dp[j] = 1;//i为0说明只由1组成那么dp[j]为1,j为0说明价值为0的组成方案只有1种(如果看成0则会WA)   
            else dp[j] = 0;//其它全部初始化为0   
        }  
    }      
    for(int i = 1 ; i < 5 ; i++){//i-1出现,那么从1开始枚举   
        for(int j = 1 ; j < MAXN ; j++){  
            for(int k = 0 ; k*type <= j ; k++)//k个type,注意必须从0开始   
                dp[j] += dp[i-1][j-k*type];//加上前面的方案数   
       }  
    }  
}  
  
int main(){  
    //freopen("input.txt" , "r" , stdin);   
    solve();  
    while(scanf("%d" , &n) != EOF){  
        for(int i = 4 ; i >= 0 ; i--){  
            if(dp[n]) { ans =  dp[n] ; break;}//从末尾开始查找只要有一个不为0就是答案   
        }  
        printf("%d\n" , ans);  
    }  
    return 0;  
}  
  
  
  
  
//(将二维优化成一维)优化后的代码   
#include <algorithm>   
#include <iostream>   
#include <cstring>   
#include <string>   
#include <vector>   
#include <cstdio>   
#include <stack>   
#include <queue>   
#include <cmath>   
using namespace std;  
#define MAXN 8000   
  
int type[5] = {1,5,10,25,50};  
int dp[MAXN];//dp表示价值i的总的方案数   
int n , ans;  
  
//打表处理好所有的数据   
void solve(){  
    memset(dp , 0 , sizeof(dp)) ; dp[0] = 1;//注意dp[0] = 1这个条件   
    for(int i = 0 ; i < 5 ; i++){  
        for(int j = 1 ; j < MAXN ; j++){  
          if(j-type >= 0) dp[j] += dp[j-type];//累加起来   
       }  
    }  
}  
  
int main(){  
    //freopen("input.txt" , "r" , stdin);   
    solve();  
    while(scanf("%d" , &n) != EOF) printf("%d\n" , dp[n]);  
    return 0;  
}  

//(没有优化)
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
using namespace std;
#define MAXN 8000

int type[5] = {1,5,10,25,50};
int dp[5][MAXN];//用int类型即可,如果MAXN上万要用unsigned long long
int n , ans;

//打表处理好所有的数据
void solve(){
    for(int i  = 0 ; i < 5 ; i++){
        for(int j = 0 ; j < MAXN ; j++){
            if(i == 0 || j == 0) dp[j] = 1;//i为0说明只由1组成那么dp[j]为1,j为0说明价值为0的组成方案只有1种(如果看成0则会WA)
            else dp[j] = 0;//其它全部初始化为0
        }
    }   
    for(int i = 1 ; i < 5 ; i++){//i-1出现,那么从1开始枚举
        for(int j = 1 ; j < MAXN ; j++){
            for(int k = 0 ; k*type <= j ; k++)//k个type,注意必须从0开始
                dp[j] += dp[i-1][j-k*type];//加上前面的方案数
       }
    }
}

int main(){
    //freopen("input.txt" , "r" , stdin);
    solve();
    while(scanf("%d" , &n) != EOF){
        for(int i = 4 ; i >= 0 ; i--){
            if(dp[n]) { ans =  dp[n] ; break;}//从末尾开始查找只要有一个不为0就是答案
        }
        printf("%d\n" , ans);
    }
    return 0;
}




//(将二维优化成一维)优化后的代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
using namespace std;
#define MAXN 8000

int type[5] = {1,5,10,25,50};
int dp[MAXN];//dp表示价值i的总的方案数
int n , ans;

//打表处理好所有的数据
void solve(){
    memset(dp , 0 , sizeof(dp)) ; dp[0] = 1;//注意dp[0] = 1这个条件
    for(int i = 0 ; i < 5 ; i++){
        for(int j = 1 ; j < MAXN ; j++){
          if(j-type >= 0) dp[j] += dp[j-type];//累加起来
       }
    }
}

int main(){
    //freopen("input.txt" , "r" , stdin);
    solve();
    while(scanf("%d" , &n) != EOF) printf("%d\n" , dp[n]);
    return 0;
}

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
16
2013年新春福章
日期:2013-02-25 14:51:24美羊羊
日期:2015-03-04 14:54:27凯迪拉克
日期:2014-11-20 09:13:05马上有钱
日期:2014-02-18 16:49:312014年新春福章
日期:2014-02-18 16:49:31优秀写手
日期:2013-12-18 09:29:13法拉利
日期:2013-10-18 16:22:26ITPUB社区12周年站庆徽章
日期:2013-10-08 17:44:42ITPUB社区12周年站庆徽章
日期:2013-10-08 15:00:34ITPUB社区12周年站庆徽章
日期:2013-10-08 14:54:39
92#
发表于 2013-5-26 11:43 | 只看该作者
哇,chinese people啊,newkid邀请过来啊,

使用道具 举报

回复
论坛徽章:
7
红旗
日期:2013-08-19 14:46:52阿斯顿马丁
日期:2013-09-09 11:06:022014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08马上加薪
日期:2014-03-14 16:40:41
93#
发表于 2013-8-13 09:06 | 只看该作者
强帖留名啊

使用道具 举报

回复
论坛徽章:
6
2014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08优秀写手
日期:2014-02-27 06:00:02问答徽章
日期:2014-04-13 19:36:532015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
94#
发表于 2014-3-2 20:23 | 只看该作者
好厉害!

使用道具 举报

回复
论坛徽章:
9
技术图书徽章
日期:2014-08-22 13:56:58itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-08 15:19:03itpub13周年纪念徽章
日期:2014-10-08 15:19:03itpub13周年纪念徽章
日期:2014-10-08 15:19:03itpub13周年纪念徽章
日期:2014-10-08 15:19:03itpub13周年纪念徽章
日期:2014-10-08 15:19:03暖羊羊
日期:2015-03-04 14:50:372015年新春福章
日期:2015-03-06 11:57:31
95#
发表于 2014-6-6 15:04 | 只看该作者
高效,水平高

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
96#
发表于 2015-4-14 08:37 | 只看该作者
网站没了

使用道具 举报

回复
论坛徽章:
2
沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:58:18
97#
发表于 2015-4-14 11:24 | 只看该作者
学习中。。

使用道具 举报

回复
论坛徽章:
0
98#
发表于 2015-6-4 15:58 | 只看该作者
高人无处不在

使用道具 举报

回复
论坛徽章:
0
99#
发表于 2015-6-4 17:27 | 只看该作者
SQL 确实很厉害

使用道具 举报

回复
论坛徽章:
3
蛋疼蛋
日期:2012-12-21 12:39:592013年新春福章
日期:2013-02-25 14:51:242013年新春福章
日期:2013-04-08 17:42:48
100#
发表于 2015-6-25 14:56 | 只看该作者
有意思, 这都是些什么人啊。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表