STL

#include <assert.h>
void assert( int expression );

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

int main( void )

{

       FILE *fp;

   

       fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件

       assert( fp );                           //所以这里不会出错

       fclose( fp );

   

       fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败

       assert( fp );                           //所以这里出错

       fclose( fp );                           //程序永远都执行不到这里来

       return 0;

}

Hdu6492

 

#include<bits/stdc++.h>

using namespace std;

#define ll long long

const int nn=3225;

ll f[nn];

ll a,b,c;int n,m,k;

void pre()

{

    int shu=(n+m+k+20);

   // cout<<shu<<endl;

    for(int i=0;i<=shu;i++)

    f[i]=(ll)1<<60;

    f[0]=(ll)0;

    for(int i=2;i<=shu;i++)

    {

        f[i]=min(f[i],f[i-2]+a);

      //  cout<<i<<" "<<f[i]<<"fe"<<endl;

    }

    for(int i=3;i<=shu;i++)

    {

        f[i]=min(f[i],f[i-3]+b);

    }

    for(int i=shu-1;i>=0;i--)

    {

        f[i]=min(f[i],f[i+1]);//要倒过来

    }

 

}

 

int main()

{

    int t;

   //pre();

    cin>>t;

//pre();

    while(t--)

    {

 

        cin>>n>>m>>k>>a>>b>>c;

        pre();

      //  cout<<f[4]<<"h"<<endl;

        ll res=((ll)1<<60);

        for(int i=0;i<=k;i++)

        {

            res=min(res,(ll)c*i+f[n+k-i]+f[m+k-i]);

        //    cout<<res<<"f"<<endl;

        //    cout<<n+k-i<<"fee"<<f[n+k-i]<<endl;

 

        }

        cout<<res<<endl;

 

    }

    return 0;

}

首先,题目很明显可以用背包,但是我忘记了,原因是我没做足够的题目,或者认真。

完全是可以知道哪里出错的。也可以逐步缩小范围判断。

有的时候根本不知道错在哪里,而这种时候重新写一遍就可以对,不过很神奇的是,思路对,又会有哪个细节出了问题。

memset(a,127,sizeof(a));

即得到无穷大。

memset(a,128,sizeof(a));

即得到无穷小,与上述的值互为相反数。

memset(a,60,sizeof(a));

即近似为第一个式子的数值的一半。

memset(a,0,sizeof(a));赋值0

memset(a,-1,sizeof(a));赋值-1

hdu6494

#include<bits/stdc++.h>

using namespace std;

int f[10010][12][12];

struct node

{

    int x,y,z;

}temp;

node fff(int i,int j)

{

    if(i==11||j==11)

    {

        temp.z=1;

        temp.x=0;

        temp.y=0;

    }

    else if(i==10&&j==10)

    {

        temp.z=0;

        temp.x=9;

        temp.y=9;

    }

    else

    {

        temp.z=0;

        temp.x=i;

        temp.y=j;

    }

    return temp;

}

char s[100010];

int main()

{

    int t;

    cin>>t;

    while(t--)

    {

        cin>>s;

        int len=strlen(s);

        memset(f,128,sizeof(f));//

        f[0][0][0]=0;//

        for(int i=1;i<=len;i++)

        {

            for(int j=0;j<=10;j++)

            {

                for(int k=0;k<=10;k++)

                {

                   // if(f[i-1][j][k]<(1<<30))//

                    if(s[i-1]=='A'||s[i-1]=='?')

                    {

                        node temp=fff(j+1,k);

                        f[i][temp.x][temp.y]=max(f[i-1][j][k]+temp.z,f[i][temp.x][temp.y]);

                        //cout<<f[i][temp.x][temp.y]<<"temp"<<endl;

                    }

                    if(s[i-1]=='B'||s[i-1]=='?')

                    {

                        node temp=fff(j,k+1);

                        f[i][temp.x][temp.y]=max(f[i-1][j][k]+temp.z,f[i][temp.x][temp.y]);

                    }

                }

            }

        }int res=0;

        for(int i=0;i<=10;i++)

        {

            for(int j=0;j<=10;j++)

            {

                res=max(res,f[len][i][j]);

             //   cout<<f[len][i][j]<<endl;

            }

        }

        cout<<res<<endl;

    }

    return 0;

}

动态规划,大转为小,然后就这样。

6495

#include<bits/stdc++.h>

using namespace std;

const int maxn=1005;

#define ll long long

ll f[maxn][maxn];

int a[maxn],b[maxn],c[maxn];

int main()

{

    int t;

    cin>>t;

    while(t--)

    {

 

 

        int n,cc;

        cin>>n>>cc; //f[0][0]=cc;

        for(int i=1;i<=n;i++)//初始值

        {

            cin>>a[i]>>b[i]>>c[i];

 

        }

        for(int i=0;i<=n;i++)

        {

            for(int j=0;j<=n;j++)

            f[i][j]=0;

        }

        f[0][0]=cc;

        for(int i=0;i<=n-1;i++)

        {

 

            for(int j=0;j<=i;j++)

            {

                if(f[i][j])//

                {

 

 

                f[i+1][j]=max(f[i][j]+c[i+1],f[i+1][j]);

                if(min(f[i][j],b[i+1]*1ll)>a[i+1])

                {

                    f[i+1][j+1]=max(f[i+1][j+1],min(f[i][j],b[i+1]*1ll)-a[i+1]+c[i+1]);

                }

                }

            }

        }

        for(int i=n;i>=0;i--)

        {

 

            if(f[n][i])

            {

               // cout<<f[n][i]<<endl;

                cout<<i<<endl;

                break;

            }

        }

 

    }

    return 0;

 

}

转移方程细节问题。

//6496

Hdu4841

#include<bits/stdc++.h>

using namespace std;

vector<int>q;//insert

int main()

{

    int n;

    int m;

    while(cin>>n>>m)

    {

       // cin>>n>>m;

       q.clear();

    for(int i=0;i<2*n;i++)

    {

        q.push_back(i);

    }

    int pos=0;

    for(int i=0;i<n;i++)

    {

         pos=(pos+m-1)%q.size();

        q.erase(q.begin()+pos);//

    }

   // for(int i=0;i<n;i++)

   // {

     //   cout<<q[i]<<" ";

   // }

    int j=0;

    for(int i=0;i<2*n;i++)

    {

        if(i&&!(i%50)) cout<<endl;

        //int j=0;

        if(j<q.size()&&i==q[j])

        {

            cout<<"G";j++;

        }

         else cout<<"B";

    }

    cout<<endl;cout<<endl;

    }

    return 0;

}

Hdu1062

Hdu1237

Hdu1702

Hdu1276

Hdu2094

Hdu2684

Hdu1027

STL 嘛,还是要熟练运用的。然后忘了 还讲了什么课了,没找到其他的了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值