现在位置: 首页 > 算法 > 文章
我这里都不好意思把这个叫做解题报告,因为开始完全什么都不懂,然后看别人的解题报告,纯粹是一个理解过程 给自己留下个纪念,。能帮到别人是更好的咯.... 讲讲自己从开始的什么都不懂,到现在略懂一点的理解: 最开始看这个链接的解题报告,很多地方看不懂 http://blog.sina.com.cn/s/blog_5cd4cccf0100apd1.html 大家可以先看看,理解题目意思,和基本思路,关于思路中的并査集,和trie树,我却都看不懂,于是,又百度 *****...
阅读全文
2017年02月21日 算法 ⁄ 共 817字 暂无评论
题意: 有d种股票,每种股票有一个购买钱数,和收益,你有本金C,year年之后,可以获得最大的投资收益是多少? 分析: 那么这里,我们可以知道每种股票可以购买无限次,那么这里可以看出是完全背包问题,可以把本金C看做背包。但是需要处理一下(等会说这个问题) 我们单独看看一年的收益,分析dp过程: dp[i][j] 表示考虑第i种股票,使用j 这么多钱的时候的最大收益。通过之前的 白话背包之完全背包 我们可以了解这里可以优化...
阅读全文
题意:你有N种硬币,每种价值A[i],每种数量C[i],问。在不超过M的情况下,我们用这些硬币,付款有多少种情况。也就是:1,2,3,4,5,....,M这么多种情况下,你能用你的硬币不找钱,付款多少种情况。 例如: 你有一种硬币,价值2,个数2,那么 你是不能付款 3元的。。你只能付款2,或者4元。。 OK,题意差不多就是这样啦。 那么这里有两种方式! 分析: 那么这里我们可以用多重背包来解决,我们把价值和重量看成一样的w[i] = A[...
阅读全文
好吧,借助poj1185炮兵布阵这题,仔仔细细的了解了一下状态压缩动态规划 首先,借助题目,我们来看看状态压缩是个虾米东西。。Ok follow me 一,所谓状态压缩 根据题意,我们得在长度为M 的地图上放置一些大炮(后面简称“放炮”,应该不会被和谐吧),那么,首先不考虑山地,我们得把所有的放置方法都找出来,并且注意,这里只对于一行且长度为M(好吧,你可能要问考虑一行,左右互相隔2,互相不在攻击范围,那么上下呢?这里先不...
阅读全文
2017年01月10日 算法 ⁄ 共 652字 评论关闭
/** * 将任意vo转化成map * * @param t vo对象 * @return */ private <T> Map<String, Object> convert2Map(T t){ Map<String, Object> result = new HashMap<String, Object>(); Method[] methods = t.getClass().getMethods(); try { for (Method method : methods) { Class<?>[] paramClass = method.getParameterTypes(); if (paramClass.length > 0) { ...
阅读全文
2016年10月22日 算法 ⁄ 共 396字 评论关闭
#include #include #include using namespace std; int main(){ int n;   while(cin>>n&&n>=3&&n<=5000){   char c[5001],d[5001];   int dp[2][5001];   getchar(); for(int i=1;i<=n;i++) { cin>>c[i]; d[n-i+1]=c[i]; } memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++)   for(int j=1;j<=n;j++)   {   dp[i%2][j]=max(dp[(i-1)%2][j],dp[i%2][j-1]);   if(c[i]==d[j])    dp[...
阅读全文
2016年10月22日 算法 ⁄ 共 297字 评论关闭
#include using namespace std; int main(){ int N; while(cin>>N&&N>1&&N<=100){ int a[105][105]; for(int i=1;i<=N;i++)   for(int j=1;j<=i;j++)     cin>>a[i][j];    for(int i=N-1;i>=1;i--)       for(int j=1;j<=i;j++)       {       int max=a[i+1][j]>a[i+1][j+1]? a[i+1][j]:a[i+1][j+1];       a[i][j]+=max;       }       cout<<a[1][1]<<end...
阅读全文
2016年10月22日 算法 ⁄ 共 382字 评论关闭
#include #include int num; int f(int n){     num++; if(n==1) return num; else if(n%2==1) return f(3*n+1); else return f((int)n/2); } using namespace std; int main(){ int i,j; while(scanf("%d%d",&i,&j)!=EOF&&i>0&&i<10000&&j>0&&j<10000){ //i>=j!!! int mi,ma; if(i>j){ mi=j; ma=i; } else{ mi=i; ma=j; } num=0; f(mi); int max=num; for(int k...
阅读全文
2016年10月22日 算法 ⁄ 共 379字 评论关闭
#include using namespace std; int main(){ int n; while(cin>>n&&n){ int a[35],sum=0,i=0,h=0; while(n--){ cin>>a[i]; sum+=a[i]; i++; }  if(sum%2==0){ sum/=2; for(int j=0;j if(h   h+=a[j];   continue; } else if(sum==h){ cout<<"Sam stops at position "<<j<<" and Ella stops at position "<<j+1<<'.'<<endl; break; } else{ cout<<"No equal pa...
阅读全文
2016年10月22日 算法 ⁄ 共 754字 评论关闭
#include #include #include using namespace std; int d[500]; bool f(int tar,char c[]){ int len=strlen(c),flag=0; char a[10]={'a'},b[10]={'a'}; for(int e=0;e   for(int f=0;f     for(int g=0;g       for(int h=0;h          for(int i=0;i          {           if(e!=f&&e!=g&&e!=h&&e!=i&&f!=g&&f!=h&&f!=i&&  g!=h&&g!=i&&h!=i&am...
阅读全文