关闭

2015-5-31:实验室第六天

84人阅读 评论(0) 收藏 举报
分类:

今天一大早上来的,清晰的记得是八点十六分踏进的实验室,结果看了一早上的零一背包。

nefuoj-18:采药

题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=18

ac代码:

<span style="font-family:SimSun;font-size:14px;"><span style="font-family:SimSun;font-size:14px;"><span style="font-family:SimSun;font-size:14px;">#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int pic[105][1005];
int t[1005],w[1005];
int maxtime,num;

int main()
{
    while(cin>>maxtime>>num)
    {
        for(int i=0; i<num; i++)
            cin>>t[i]>>w[i];

        for(int i=0; i<num; i++)
        {
            for(int j=1; j<=maxtime; j++)
            {
                if(i==0)
                {
                    j>=t[0]? pic[i][j]=w[0]: pic[i][j]=0;
                }
                else
                {
                    pic[i][j]=pic[i-1][j];
                    if(j>=t[i])
                    pic[i][j]=max(pic[i][j],w[i]+pic[i-1][j-t[i]]);
                }
            }
        }
        cout<<pic[num-1][maxtime]<<endl;
    }
    return 0;
}
</span></span></span>


嗯。。就这样吧。我觉得我还是需要一个系统的学习过程,今天从刘汝佳第六章继续学习,加油/

下面继续水题。好吧我其实是从第五章末尾开始看的,刚刚1A了一个优先队列的简单题。

uvaoj-12100:打印队列

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3252

ac代码:

<span style="font-family:SimSun;font-size:14px;"><span style="font-family:SimSun;font-size:14px;">#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
queue<int> que;
priority_queue<int,vector<int>,less<int> > pre;
int main()
{
    int T;
    int n,m,inp;
    cin>>T;
    while(T--)
    {
        //initail
        while(!que.empty())
            que.pop();
        while(!pre.empty())
            pre.pop();
        cin>>n>>m;
        //input
        for(int i=0; i<n; i++)
        {
            cin>>inp;
            que.push(inp);
            pre.push(inp);
        }
        //run
        int cnt=0;
        while(1)
        {
            if(que.front()==pre.top())
            {
                cnt++;
                //cout<<"que.front():\t"<<que.front()<<"pre.top():\t"<<pre.top()<<endl;
                //cout<<"cnt:\t"<<cnt<<"m:\t"<<m<<endl;
                if(m==0)
                {
                    cout<<cnt<<endl;
                    break;
                }
                else
                {
                    que.pop();
                    pre.pop();
                    m--;

                }
            }
            else
            {
                //cout<<"que.front():\t"<<que.front()<<"pre.top():\t"<<pre.top()<<endl;
               // cout<<"cnt:\t"<<cnt<<"m:\t"<<m<<endl;
                int temp=que.front();
                que.push(temp);
                que.pop();
                if(m==0)
                    m=que.size()-1;
                else
                    m--;
            }
        }

    }
    return 0;
}
</span></span>


这道题使用优先队列来保证当前打印的工作一定是优先度最大的那个,其实如果是用数组模拟队列的话我更喜欢用*max——element()来找最大的优先度的那个。这道题是很少的没看博客就写出来的,值得纪念。

其实主要的问题还是细致吧,m的加减还有cnt的加减因为粗心卡了我半个多小时,但是还好ac了,而且是1A,不错不错哦~

//16:43

刚刚搞了两个刘汝佳树上的题,一个是栈的那个走火车,另外一个是求油田,一个挺简单的dfs;

可怜uva又崩了,迟迟不审批,我也不知道对不对,反正样例都过了,就先贴上,然后弄dp;

uvaoj-514:火车进站

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=455

代码:

<span style="font-family:SimSun;font-size:14px;">#include <stack>
#include <cstdio>
#include <iostream>
using namespace std;

int main()
{
    stack<int> sta;
    int arr[1005];
    int tail,num,n,flag;
    while(cin>>n&&n)
    {
        while(cin>>arr[0]&&arr[0])
        {
            //input
            for(int i=1; i<n; i++)
                cin>>arr[i];
            //initail
            while(!sta.empty())
            {
                sta.pop();
            }
            tail=0,num=1,flag=0;
            //run
            while(num<=n)
            {
                if(tail==n-1)
                {
                    flag=1;
                    break;
                }
                else if(arr[tail]==num)
                {
                    tail++;
                    num++;
                }
                else if(!sta.empty()&&sta.top()==arr[tail])
                {
                    tail++;
                    sta.pop();
                }
                else
                {
                    sta.push(num++);
                }
                //cout<<"num:\t"<<num<<endl;
                //cout<<"tail:\t"<<tail<<endl;
            }
            printf("%s\n",flag ? "Yes":"No");

        }
    }
    return 0;
}
</span>


uvaoj-572:油田

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=513

代码:

<span style="font-family:SimSun;font-size:14px;">#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n,m;
char pic[105][105];
int ansnum;
int dir[16][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
void dfs(int x,int y)
{

    for(int i=0; i<8; i++)
    {
        int dirx=x+dir[i][0];
        int diry=y+dir[i][1];
        //cout<<"dir[i][0]:\t"<<dir[i][0]<<"dir[i][1]:\t"<<dir[i][1]<<endl;
        //cout<<"dirx:\t"<<dirx<<"diry:\t"<<diry<<endl<<endl;
        if(pic[dirx][diry]=='*'||dirx<0||diry<0||dirx>=n||diry>=m)
            continue;
        pic[dirx][diry]='*';
        dfs(dirx,diry);
    }
}

int main()
{
    while(cin>>n>>m&&(n||m))
    {
        //
        cin.get();
        memset(pic,0,sizeof pic);
        ansnum=0;
        //
        for(int i=0; i<n; i++)
        {
            gets(pic[i]);
        }
        //
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                if(pic[i][j]=='@')
                {
                    ansnum++;
                    pic[i][j]='*';
                    dfs(i,j);
                }
            }
        }
        cout<<ansnum<<endl;
    }
    return 0;
}
</span>







0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15392次
    • 积分:771
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论