一道DP的ACM题,大家来思考一下吧

AAA20090987 2009-12-03 11:53:02
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1074

Doing Homework

Problem Description
Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after the deadline, the teacher will reduce his score of the final test, 1 day for 1 point. And as you know, doing homework always takes a long time. So Ignatius wants you to help him to arrange the order of doing homework to minimize the reduced score.


Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case start with a positive integer N(1<=N<=15) which indicate the number of homework. Then N lines follow. Each line contains a string S(the subject's name, each string will at most has 100 characters) and two integers D(the deadline of the subject), C(how many days will it take Ignatius to finish this subject's homework).

Note: All the subject names are given in the alphabet increasing order. So you may process the problem much easier.



Output
For each test case, you should output the smallest total reduced score, then give out the order of the subjects, one subject in a line. If there are more than one orders, you should output the alphabet smallest one.



Sample Input
2
3
Computer 3 3
English 20 1
Math 3 2
3
Computer 3 3
English 6 3
Math 6 3


Sample Output
2
Computer
Math
English
3
Computer
English
Math

Hint
In the second test case, both Computer->English->Math and Computer->Math->English leads to reduce 3 points, but the
word "English" appears earlier than the word "Math", so we choose the first order. That is so-called alphabet order.

...全文
486 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
AAA20090987 2009-12-13
  • 打赏
  • 举报
回复
呵呵,Thank you.
绿色夹克衫 2009-12-11
  • 打赏
  • 举报
回复
能AC么?那还真不错!我以为还会有些问题呢!

[Quote=引用 13 楼 aaa20090987 的回复:]
行了,我把你的代码改成C++之后,交上去AC了
谢谢你啊。
[/Quote]
AAA20090987 2009-12-11
  • 打赏
  • 举报
回复
行了,我把你的代码改成C++之后,交上去AC了
谢谢你啊。
绿色夹克衫 2009-12-08
  • 打赏
  • 举报
回复
晚上回家贴吧,现在工作中,手头没有代码!

[Quote=引用 10 楼 aaa20090987 的回复:]
5楼的代码是已经AC了的,(当然,这不是我写的), 所以你把测试数据用5楼的代码和你的代码测试一下,看两个结果是否相同,就可以知道你的代码正确与否了。
或者你也可以把你的代码放上来,大家一起讨论一下啦。呵呵。
[/Quote]
AAA20090987 2009-12-08
  • 打赏
  • 举报
回复
5楼的代码是已经AC了的,(当然,这不是我写的), 所以你把测试数据用5楼的代码和你的代码测试一下,看两个结果是否相同,就可以知道你的代码正确与否了。
或者你也可以把你的代码放上来,大家一起讨论一下啦。呵呵。
绿色夹克衫 2009-12-08
  • 打赏
  • 举报
回复
用c#写的贪心解法,感觉还有没想到的特殊情况。代码比较恶心,凑合看吧!不好意思!


using System;
using System.Collections.Generic;
using System.Linq;

namespace CommonLab
{
class Program
{
class HomeWork : IComparable
{
//结束日期
public int Deadline;

//花费的时间
public int Spend;

//科目名称
public string Subject;

//最晚开始做的时间Deadline - Spend
public int PreDeadline
{ get { return Deadline - Spend; } }

public HomeWork() { }

public HomeWork(int deadline, int spend, string subject)
{
Spend = spend;
Deadline = deadline;
Subject = subject;
}

public HomeWork Clone()
{
HomeWork outer = new HomeWork(Deadline, Spend, Subject);
return outer;
}

public int CompareTo(object obj)
{
HomeWork B = obj as HomeWork;

if (B.Spend != Spend)
return Spend.CompareTo(B.Spend);
else if (B.Deadline != Deadline)
return Deadline.CompareTo(B.Deadline);
else
return Subject.CompareTo(B.Subject);
}
}

static void Main(string[] args)
{
//将作业科目添加到列表
List<HomeWork> homeWorkList = new List<HomeWork>();
Dictionary<string, HomeWork> dict = new Dictionary<string, HomeWork>();
homeWorkList.Add(new HomeWork(10, 10, "Computer"));
homeWorkList.Add(new HomeWork(11, 1, "English"));
homeWorkList.Add(new HomeWork(11, 1, "Math"));
homeWorkList.Add(new HomeWork(11, 1, "Math1"));
homeWorkList.Add(new HomeWork(11, 1, "Math2"));
homeWorkList.Add(new HomeWork(11, 1, "Math3"));
homeWorkList.Add(new HomeWork(11, 1, "Math4"));

//按照deadline排序
homeWorkList.Sort(CompareByDeadline);

//将列表内容复制一个副本
for (int i = 0; i < homeWorkList.Count; i++)
dict.Add(homeWorkList[i].Subject, homeWorkList[i].Clone());

//从后向前,把deadline向前推,处理后的任务占用时间互不重合
for (int i = homeWorkList.Count - 2; i >= 0; i--)
{
if (homeWorkList[i].Deadline > homeWorkList[i + 1].PreDeadline)
homeWorkList[i].Deadline = homeWorkList[i + 1].PreDeadline;
}

//建立一个优先队列,花费时间短的任务排在前头
SortedDictionary<HomeWork,int> pQueue = new SortedDictionary<HomeWork,int>();
int sumSpend = 0, currentSpend = 0, currendIndex = 0, reduced = 0;
Queue<string> homeWorkQueue = new Queue<string>();
int deadline = dict[homeWorkList[0].Subject].Deadline;

while (true)
{
//处理deadline之间的任务,将互相冲突的任务都加入队列
while (currendIndex < homeWorkList.Count && homeWorkList[currendIndex].Deadline <= deadline)
{
sumSpend += homeWorkList[currendIndex].Spend;
pQueue.Add(homeWorkList[currendIndex], homeWorkList[currendIndex].Spend);
currendIndex++;
}

//尽量选取花费时间短的任务
while ((currentSpend < deadline || currendIndex >= homeWorkList.Count) && pQueue.Count > 0)
{
HomeWork item = pQueue.ElementAt(0).Key;

if (currentSpend + item.Spend <= deadline || currendIndex >= homeWorkList.Count)
{
homeWorkQueue.Enqueue(item.Subject);
pQueue.Remove(item);
currentSpend += item.Spend;

//计算被扣的分数
if (currentSpend > dict[item.Subject].Deadline)
reduced += currentSpend - dict[item.Subject].Deadline;
}
else
{
//如果某些任务只做了一半,修改剩余需要花费的时间
item.Spend = currentSpend + item.Spend - deadline;
currentSpend = deadline;
}
}

//设定下一步需处理的deadline
if (currendIndex >= homeWorkList.Count)
break;
else if (pQueue.Count > 0)
deadline = Math.Min(sumSpend, dict[homeWorkList[currendIndex].Subject].Deadline);
else
deadline = dict[homeWorkList[currendIndex].Subject].Deadline;
}

//按照计算结果输出
Console.WriteLine(reduced);
while (homeWorkQueue.Count > 0)
Console.WriteLine(homeWorkQueue.Dequeue());
}

static int CompareByDeadline(HomeWork A, HomeWork B)
{
return A.Deadline.CompareTo(B.Deadline);
}
}
}
绿色夹克衫 2009-12-07
  • 打赏
  • 举报
回复
LZ能多提供一些测试数据么?用贪心写了一个,不过代码比较恶心,简直就像是凑数弄出来的,
如果测试通过了,再考虑优化一下代码结构。

目前这两个例子测对了,但顺序可能会稍有不同,我自己试了几种,似乎也是对的,但总觉得有些撞大运的感觉。
绿色夹克衫 2009-12-07
  • 打赏
  • 举报
回复
是吗,这两天有空的话我写一个试试吧,LZ给的程序没有仔细看,怕失去了思考的乐趣。
但看起来效率也是不错的!

[Quote=引用 7 楼 aaa20090987 的回复:]
引用 6 楼 litaoye 的回复:
不好意思,我太弱了,连题目都没看明白,LZ提醒之后才发现有个1天扣1分的条件。
我又想当然的把这道题理解为最多能在规定时间内完成多少个任务。

刚看见1天扣1分的条件感觉像最小生成树,后来又想了1下,感觉这道题还是可以用贪心解,
今天忙,没时间细说了,大概想法就是按照deadline倒序排,如果有时间上的重复,
就把任务1件1件往前推,一直推到最前面,然后从前向后,在每个deadline之前,
选取用时最短的homework来做,这部分可用优先队列实现,当有完不成的任务时,就将剩余量
放入下一部分deadline的队列里面。如果1个时长为5的任务已经做了3天,那么放入新的队列之后,
时长按照2来算。


这样好像不行吧,我这样写之后,算出的结果和示例的output不同啊。
[/Quote]
AAA20090987 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 litaoye 的回复:]
不好意思,我太弱了,连题目都没看明白,LZ提醒之后才发现有个1天扣1分的条件。
我又想当然的把这道题理解为最多能在规定时间内完成多少个任务。

刚看见1天扣1分的条件感觉像最小生成树,后来又想了1下,感觉这道题还是可以用贪心解,
今天忙,没时间细说了,大概想法就是按照deadline倒序排,如果有时间上的重复,
就把任务1件1件往前推,一直推到最前面,然后从前向后,在每个deadline之前,
选取用时最短的homework来做,这部分可用优先队列实现,当有完不成的任务时,就将剩余量
放入下一部分deadline的队列里面。如果1个时长为5的任务已经做了3天,那么放入新的队列之后,
时长按照2来算。
[/Quote]

这样好像不行吧,我这样写之后,算出的结果和示例的output不同啊。
绿色夹克衫 2009-12-04
  • 打赏
  • 举报
回复
不好意思,我太弱了,连题目都没看明白,LZ提醒之后才发现有个1天扣1分的条件。
我又想当然的把这道题理解为最多能在规定时间内完成多少个任务。

刚看见1天扣1分的条件感觉像最小生成树,后来又想了1下,感觉这道题还是可以用贪心解,
今天忙,没时间细说了,大概想法就是按照deadline倒序排,如果有时间上的重复,
就把任务1件1件往前推,一直推到最前面,然后从前向后,在每个deadline之前,
选取用时最短的homework来做,这部分可用优先队列实现,当有完不成的任务时,就将剩余量
放入下一部分deadline的队列里面。如果1个时长为5的任务已经做了3天,那么放入新的队列之后,
时长按照2来算。
AAA20090987 2009-12-03
  • 打赏
  • 举报
回复
//1311853 2009-04-26 19:16:12 Accepted 1074 281MS 524K 1323 B C++ no way 
#include<iostream>
#include<string>
using namespace std;
struct Node
{
string course;
int deadline;
int need;
}infor[16];
int n;
int binary[16] = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
int flag[65536];
bool mark[16];
string str[16],outs[16];
void dfs(int days,int cost,int sum,int num)//num表示选择的作业数
{ //days表示写作业的开始日期,cost表示前面的花费,sum记录作业是否完成情况
int i,temp;
if(num == n)
{
if(flag[sum] == cost)
{
flag[sum] = cost;
for(i=0;i<num;i++)
outs[i] = str[i];
}
return ;
}
for(i=1;i<=n;i++)
{
if(mark[i] == false)
{
mark[i] = true;
sum += binary[i];//要写第i门作业
///////////////////////////////////////////////////
temp = days + infor[i].need - infor[i].deadline;
if(temp < 0)
temp = cost;
else
temp += cost;
// 第i门作业完成后的代价 temp
//////////////////////////////////////
if(flag[sum] > temp)
{
flag[sum] = temp; //记录状态

str[num++] = infor[i].course;

dfs(days + infor[i].need,temp,sum,num);

num --;
}
sum -= binary[i];
mark[i] = false;
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int i,st=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>infor[i].course>>infor[i].deadline>>infor[i].need;
for(i=0;i<65536;i++)
flag[i] = 1000000;
memset(mark,false,sizeof(mark));//标记状态
dfs(0,0,0,0);
for(i=1;i<=n;i++)
st += binary[i]; //结果存放在下标为st的flag[st]值中
cout<<flag[st]<<endl;
for(i=0;i<n;i++)
cout<<outs[i]<<endl;
}
return 0;
}


这是我在网上找的答案,但我不怎么看得明白,大家也来看一下吧
如果看得明白就解释一下啦,呵呵,先谢谢啦。
AAA20090987 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
应该不用DP,贪心就可以了,算出每个homework最晚开始的时间finishTime,找出finishTime最大的1个,
作为最后1个任务,然后相当于把所有deadline > finishTime[0]的任务的deadline向前推了,变为finishTime[0]了, 然后重复上面的方法......
[/Quote]

这样好像不行吧,毕竟每天扣的分数不一样,继续请教。
绿色夹克衫 2009-12-03
  • 打赏
  • 举报
回复
应该不用DP,贪心就可以了,算出每个homework最晚开始的时间finishTime,找出finishTime最大的1个,
作为最后1个任务,然后相当于把所有deadline > finishTime[0]的任务的deadline向前推了,变为finishTime[0]了, 然后重复上面的方法......
AAA20090987 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 haozi8993 的回复:]
按做作业所花的时间减去最后期限降序排序,如果值相等再按科目名的第一字节升序排序,然后打印出来,是这个意思吗?
[/Quote]

是的,但过了期限之后,第一天的smallest total reduced score加一,第二天加二,第三天。。。。。。。。。。。。。。
这个我觉得很难,也想不出有什么方法来解决。
罗耗子 2009-12-03
  • 打赏
  • 举报
回复
按做作业所花的时间减去最后期限降序排序,如果值相等再按科目名的第一字节升序排序,然后打印出来,是这个意思吗?
# 国家集训队论文列表(1999-2019) ___点击目录快速跳转:___ - _国家集训队论文列表(1999-2019)_ * [_1999_](#1999) * [_2000_](#2000) * [_2001_](#2001) * [_2002_](#2002) * [_2003_](#2003) * [_2004_](#2004) * [_2005_](#2005) * [_2006_](#2006) * [_2007_](#2007) * [_2008_](#2008) * [_2009_](#2009) * _2010~2012:组委会暂停论文答辩项目_ * [_2013_](#2013) * [_2014_](#2014) * [_2015_](#2015) * [_2016_](#2016) * [_2017_](#2017) * [_2018_](#2018) * [_2019_](#2019) - _论文分类汇总(1999-2009)_ * [组合数学](#组合数学) + [计数与统计](#计数与统计) + [数位问](#数位问) + [动态统计](#动态统计) + [博弈](#博弈) + [母函数](#母函数) + [拟阵](#拟阵) + [线性规划](#线性规划) + [置换群](#置换群) + [问答交互](#问答交互) + [猜数问](#猜数问) * [数据结构](#数据结构) + [数据结构](#数据结构-1) + [结构联合](#结构联合) + [块状链表](#块状链表) + [动态树](#动态树) + [左偏树](#左偏树) + [跳表](#跳表) + [SBT](#sbt) + [线段树](#线段树) + [单调队列](#单调队列) + [哈希表](#哈希表) + [Splay](#splay) * [图论](#图论) + [图论](#图论-1) + [模型建立](#模型建立) + [网络流](#网络流) + [最短路](#最短路) + [欧拉路](#欧拉路) + [差分约束系统](#差分约束系统) + [平面图](#平面图) + [2-SAT](#2-sat) + [最小生成树](#最小生成树) + [二分图](#二分图) + [Voronoi图](#voronoi图) + [偶图](#偶图) * [树](#树) + [树](#树-1) + [路径问](#路径问) + [最近公共祖先](#最近公共祖先) + [划分问](#划分问) * [数论](#数论) + [欧几里得算法](#欧几里得算法) + [同余方程](#同余方程) * [搜索](#搜索) + [搜索](#搜索-1) + [启发式](#启发式) + [优化](#优化) * [背包问](#背包问) * [匹配](#匹配) * [概率](#概率) + [概率](#概率-1) + [数学期望](#数学期望) * [字符串](#字符串) + [字符串](#字符串-1) + [多串匹配](#多串匹配) + [后缀数组](#后缀数组) + [字符串匹配](#字符串匹配) * [动态规划](#动态规划) + [动态规划](#动态规划-1) + [状态压缩](#状态压缩) + [状态设计](#状态设计) + [树形DP](#树形dp) + [优化](#优化-1) * [计算几何](#计算几何) + [立体几何](#立体几何) + [计算几何思想](#计算几何思想) + [圆](#圆) + [半平面交](#半平面交) * [矩阵](#矩阵) + [矩阵](#矩阵-1) + [高斯消元](#高斯消元) * [数学方法](#数学方法) + [数学思想](#数学思想) + [数学归纳法](#数学归纳法) + [多项式](#多项式) + [数形结合](#数形结合) + [黄金分割](#黄金分割) * [其他算法](#其他算法) + [遗传算法](#遗传算法) + [信息论](#信息论) + [染色与构造](#染色与构造) * [一类问](#一类问) + [区间](#区间) + [序](#序) + [系](#系) + [物理问](#物理问) + [编码与译码](#编码与译码) + [对策问](#对策问) * [优化](#优化-2) + [算法优化](#算法优化) + [程序优化](#程序优化) + [语言](#语言) * [策略](#策略) + [策略](#策略-1) + [倍增](#倍增) + [二分](#二分) + [调整](#调整) + [随机化](#随机化) + [非完美算法](#非完美算法) + [提交答案](#提交答案) + [守恒思想](#守恒思想) + [极限法](#极限法) + [贪心](#贪心) + [压缩法](#压缩法) + [逆向思维](#逆向思维) + [穷举](#穷举) + [目标转换](#目标转换) + [类比](#类比) + [分割与合并](#分割与合并) + [平衡思想](#平衡思想) Table of contents generated with markdown-toc --- ## 1999 陈 宏 -《数据结构的选择与算法效率——从IOI98试PICTURE谈起》 来煜坤 -《把握本质,灵活运用——动态规划的深入探讨》 齐 鑫 -《搜索方法中的剪枝优化》 邵 铮 -《数学模型的建立、比较和应用》 石润婷 -《隐蔽化、多维化、开放化──论当今信息学竞赛中数学建模的灵活性》 杨 帆 -《准确性、全面性、美观性——测试数据设计中的三要素》 周咏基 -《论随机化算法的原理与设计》 ## 2000 陈 彧 《信息学竞赛中的思维方法》 方 奇 《动态规划》 高寒蕊 -《递推关系的建立及在信息学竞赛中的应用》 郭 一 -《数学模型及其在信息学竞赛中的应用》 江 鹏 -《探索构造法解模式》 李 刚 -《动态规划的深入讨论》 龙 翀 -《解决空间规模问的几种常用的存储结构》 骆 骥 -《数学模型的建立和选择》 施 遥 -《人工智能在围棋程序中的应用》 肖 洲 -《数据结构的在程序设计中的应用》 谢 婧 -《规模化问的解策略》 徐 串 -《论程序的调试技巧》 徐 静 -《图论模型的建立与转化》 杨江明 -《论数学策略在信息学问中的应用》 杨 培 -《非最优化算法初探》 张 辰 -《动态规划的特点及其应用》 张 力 -《类比思想在解中的应用》 张一飞 -《冗繁削尽留清瘦——浅谈信息的充分利用》 ## 2001 高寒蕊 -《从圆桌问谈数据结构的综合运用》 符文杰 -《Pólya原理及其应用》 高 岳 -《中等硬度解报告》 江 鹏 -《从一道目的解法试谈网络流的构造与算法》 刘汝佳 -《搬运工问的启示》 李益明 -《计算几何的相关问》 李 源 -《树的枚举》 骆 骥 -《由"汽车问"浅谈深度搜索的一个方面——搜索对象与策略的重要性》 毛子青 -《动态规划算法的优化技巧》 俞 玮 -《基本动态规划问的扩展》 张一飞 -《求N!的高精度算法》 ## 2002 戴德承 -《退一步海阔天空——"目标转化思想"的若干应用》 方 奇 -《浅谈必要条件的应用》 符文杰 -《排序网络》 何江舟 -《用高斯消元法解线性方程组》 何 林 -《猜想及其应用》 黄 芸 -《POI0110 跳舞蝇》 金 恺 -《浅谈网络流算法的应用》 李澎煦 -《半平面交的算法及其应用》 李 睿 -《二分法与统计问》 骆 骥 -《浅析解 "对策问" 的两种思路——从《取石子》问谈起》 孙方成 -《偶图的算法及应用》 孙林春 -《让我们做得更好——从《Parity》的解法谈程序的优化》 王知昆 -《搜索顺序的选择》 许智磊 -《二分,再二分!――从Mobiles(IOI 2001)一看多重二分》 杨旻旻 -《构造法——解的最短路径》 张家琳 -《多项式乘法》 张 宁 -《遗传算法的特点及其应用》 张一飞 -《由感性认识到理性认识——透析一类搏弈游戏的解答过程》 周文超 -《树结构在程序设计中的运用》 ## 2003 方 奇 -《染色法和构造法在棋盘上的应用》 高正宇 -《答案只有一个——浅谈问答式交互问》 何 林 -《一类称球问的解法》 侯启明 -《信息论在信息学竞赛中的简单应用》 姜尚仆 -《模线性方程的应用——用数论方法解决整数问》 金 恺 -《探寻深度优先搜索中的优化技巧——从正方形剖分问谈起》 雷环中 -《结果提交类问》 林希德 -《求最大重复子串》 刘才良 -《平面图在信息学中的应用》 刘一鸣 -《一类搜索的优化思想——数据有序化》 陆可昱 -《长方体体积并》 饶向荣 -《病毒的DNA——剖析一道字符匹配问解析过程》 邵烜程 -《数学思想助你一臂之力》 王知昆 -《浅谈用极大化思想解决最大子矩形问》 伍 昱 -《由对称性解2-SAT问》 项荣璟 -《充分利用问性质——例析动态规划的"个性化"优化》 许智磊 -《浅谈补集转化思想在统计问中的应用》 张 宁 -《猜数问的研究》 张云亮 -《论对算法的选择》 周 源 -《浅析"最小表示法"思想在字符串循环同构问中的应用》 ## 2004 何 林 -《信息学中守恒法的应用》 胡伟栋 -《减少冗余与算法优化》 金 恺 -《极限法——解决几何最优化问的捷径》 李锐喆 -《细节——不可忽视的要素》 鬲 融 -《浅谈特殊穷举思想的应用》 周 源 -《浅谈数形结合思想在信息学竞赛中的应用》 朱晨光 -《优化,再优化!》 肖 天 -《"分层图思想"及其在信息学竞赛中的应用》 汪 汀 -《最小生成树问的拓展》 吴景岳 -《最小生成树算法及其应用》 栗 师 -《转化目标在解中的应用》 薛 矛 -《解决动态统计问的两把利刃》 黄源河 -《浅谈图论模型的建立与应用》 楼天城 -《匹配算法在搜索问中的应用》 贝小辉 -《浅析树的划分问》 林 涛 -《线段树的应用》 杨思雨 -《伸展树的基本操作与应用》 许智磊 -《后缀数组》 朱泽园 -《多串匹配算法及其启示》 韩文弢 -《论C++语言在信息学竞赛中的应用》 ## 2005 龙 凡 -《序的应用》 魏 冉 -《浅谈“跳跃表”的相关操作及其应用》 任 恺 -《图论的基本思想及方法》 杨 俊 -《二分策略在信息学竞赛中的应用》 张伟达 -《用改进算法的思想解决规模维数增大的问》 黄 刚 -《数据结构的联合》 杨 弋 -《从“小H的小屋”的解法谈算法的优化》 朱晨光 -《浅析倍增思想在信息学竞赛中的应用》 李羽修 -《Hash函数的设计优化》 王 俊 -《浅析二分图匹配在信息学竞赛中的应用》 唐文斌 -《正难则反——浅谈逆向思维在解中的应用》 黄源河 -《左偏树的特点及其应用》 钱自强 -《遗传算法应用的分析与研究》 杨思雨 -《浅谈“黄金分割”和信息学的联系》 潘震皓 -《置换群快速幂运算研究与探讨》 胡伟栋 -《非完美算法在信息学竞赛中的应用》 何 林 -《数据关系的简化》 汪 汀 -《参数搜索的应用》 周 源 -《浅谈信息学竞赛中的“压缩法”》 朱泽园 -《回到起点 ----《一种突破性思维》 ## 2006 陈启峰 -《“约制、放宽”方法在解中的应用》 陈首元 -《维护森林连通性——动态树》 冯 威 -《数与图的完美结合——浅析差分约束系统》 高逸涵 -《对于一道目的深入分析》 胡伟栋 -《演讲的若干建议》 黄劲松 -《贪婪的动态规划》 黄晓愉 -《深度优先搜索问的优化技巧》 贾 由 -《由图论算法浅析算法优化》 李天翼 -《从特殊情况考虑》 龙 凡 -《一类猜数问的研究》 汤 泽 -《浅析队列在一类单调性问中的应用》 唐文斌 -《“调整”思想在信息学中的应用》 汪 晔 -《信息学中的参考系与坐标系》 王 栋 -《浅析平面Voronoi图的构造及应用》 王 赟 -《Trie图的构建、活用与改进》 余远铭 -《最短路算法及其应用》 俞 鑫 -《棋盘中的棋盘——浅谈棋盘的分割思想》 周戈林 -《浅谈类比思想》 周以苏 -《论反汇编在时间常数优化中的应用》 朱晨光 -《基本数据结构在信息学竞赛中的应用》 朱泽园 -《半平面交的新算法及其实用价值》 ## 2007 高逸涵 -《与圆有关的离散化》 王晓珂 -《解析一类组合游戏》 仇荣琦 -《欧拉回路性质与应用探究》 余江伟 -《如何解决动态统计问》 杨 沐 -《浅析信息学中的“分”与“合”》 李宇骞 -《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》 袁昕颢 -《动态树及其应用》 杨 哲 -《凸完全单调性的加强与应用》 王欣上 -《浅谈基于分层思想的网络流算法》 陈启峰 -《Size Balanced Tree》 杨 弋 -《Hash在信息学竞赛中的一类应用》 古 楠 -《平面嵌入》 郭华阳 -《RMQ与LCA问》 刘雨辰 -《对拟阵的初步研究》 陈 雪 -《问中的变与不变》 何 森 -《浅谈数据的合理组织》 胡伯涛 -《最小割模型在信息学竞赛中的应用》 陈瑜希 -《多角度思考创造性思维——运用树型动态规划解的思路和方法探析》 周 冬 -《生成树的计数及其应用》 刘家骅 -《浅谈随机化在信息学竞赛中的应用》 ## 2008 曹钦翔 -《数据结构的提炼与压缩》 郑 暾 -《平衡规划——浅析一类平衡思想的应用》 刘 弈 -《浅谈信息学中状态的合理设计与应用》 顾 研 -《浅谈随机化思想在几何问中的应用》 周梦宇 -《码之道——浅谈信息学竞赛中的编码与译码问》 肖汉骏 -《例谈信息学竞赛分析中的“深”与“广”》 方 戈 -《浅析信息学竞赛中一类与物理有关的问》 吕子鉷 -《浅谈最短径路问中的分层思想》 周小博 -《浅谈信息学竞赛中的区间问》 俞华程 -《矩阵乘法在信息学中的应用》 程芃祺 -《计算几何中的二分思想》 高逸涵 -《部分贪心思想在信息学竞赛中的应用》 **陈丹琦 -《基于连通性状态压缩的动态规划问》** 张煜承 -《一类算法复合的方法》 陈瑜希 -《Pólya计数法的应用》 余林韵 -《运用化归思想解决信息学中的数列问》 任一恒 -《非完美算法初探》 高亦陶 -《从立体几何问看降低编程复杂度》 **苏 煜 -《对块状链表的一点研究》** 周 冬 -《两极相通——浅析最大—最小定理在信息学竞赛中的应用》 ## 2009 武 森 -《浅谈信息学竞赛中的“0”和“1”》 **贾志豪 -《组合游戏略述——浅谈SG游戏的若干拓展及变形》** 徐持衡 -《浅谈几类背包》 骆可强 -《论程序底层优化的一些方法与技巧》 刘 聪 -《浅谈数位类统计问》 **李骥扬 -《线段跳表——跳表的一个拓展》** 汤可因 -《浅析竞赛中一类数学期望问的解决方法》 徐源盛 -《对一类动态规划问的研究》 张昆玮 -《数学归纳法与解之道》 漆子超 -《分治算法在树的路径问中的应用》 罗穗骞 -《后缀数组——处理字符串的有力工具》 **方展鹏 -《浅谈如何解决不平等博弈问》** 姜碧野 -《SPFA算法的优化及应用》 **毛杰明 -《母函数的性质及应用》** 董华星 -《浅析字母树在信息学竞赛中的应用》 梅诗珂 -《信息学竞赛中概率问求解初探》 高逸涵 -《数位计数问解法研究》 周而进 -《浅谈估价函数在信息学竞赛中的应用》 金 斌 -《欧几里得算法的应用》 曹钦翔 -《从“k倍动态减法游戏”出发探究一类组合游戏问》 ## 2010~2012:组委会暂停论文答辩项目 ## 2013 彭天翼 -《登顶计划》 王康宁 -《方格取数》 罗 干 -《Two strings 试讨论》 张闻涛 -《Catch The Penguins》 罗剑桥 -《浅谈分块思想在一类数据处理问中的应用》 乔明达 -《搜索问中的meet in the middle技巧》 胡渊鸣 -《浅析信息学竞赛中概率论的基础与应用》 许昊然 -《浅谈数据结构的几个非经典解法》 陈立杰 -《重量平衡树和后缀平衡树在信息学奥赛中的应用》 高胜寒 -《浅谈环状计数问》 王子昱 -《分块方法的应用》 王 迪 -《浅谈容斥原理》 ## 2014 王子昱 -《MSS 命报告》 余行江 -《矩阵 命报告》 董宏华 -《多变的多边形》 岑若虚 -《对置换群有关算法的初步研究》 匡正非 -《浅谈线性相关》 张恒捷 -《关于三维最小乘积生成树的一些研究》 徐 毅 -《浅谈回文子串问》 梁泽宇 - 《浅谈维护多维数组的方法在数据结构中的应用》 **王悦同 -《根号算法——不只是分块》** **黄志翱 -《浅谈动态树的相关问及简单拓展》** **胡泽聪 -《随机化算法在信息学竞赛中的应用》** **何 琦 -《精细地实现程序——浅谈OI竞赛中的常数优化》** **沈 洋 -《回归本源——位运算及其应用》** **俞鼎力 -《寻找第 k 优解的几种方法》** ## 2015 刘研绎 -《后缀自动机在字典树上的拓展》 **任之洲 -《浅谈启发式思想在信息学竞赛中的应用》** 王鉴浩 -《浅谈字符串匹配的几种方法》 张天扬 -《后缀自动机及其应用》 金 策 -《生成函数的运算与组合计数问》 刘剑成 -《YDC的奖金命报告》 邹逍遥 -《浅谈分块在一类在线问中的应用》 王逸松 -《仙人掌相关算法及其应用》 陈胤伯 -《浅谈图的匹配算法及其应用》 陈思禹 -《浅谈信息学竞赛中的物理问》 于纪平 -《丢失的面命报告》 张恒捷 -《DP的一些优化技巧》 杜瑜皓 -《Product命报告》 卢啸尘 -《关于以源代码为输入的一类问的初步探索》 吕凯风 -《集合幂级数的性质与应用及其快速算法》 ## 2016 **任之洲 -《积性函数求和的几种方法》** **姜志豪 -《网络流的一些建模方法》** 董克凡 -《浅谈线性规划与对偶问》 王文涛 -《浅谈无向图最小割问的一些算法及应用》 邹逍遥 -《浅谈线性规划在信息学竞赛中的应用》 **吉如一 -《区间最值操作与历史最值问》** **毛 啸 -《再探快速傅里叶变换》** **罗哲正 -《从Unknown谈一类支持末尾插入删除的区间信息维护方法》** 洪华敦 -《小C的后缀数组命报告》 张浩威 -《消消看 命报告》 李子豪 -《《strakf》命报告》 汪文潇 -《《过去的集合》命报告》 **吴作凡 -《火车司机出秦川 命报告》** 金 策 -《基础排序算法练习》 袁宇韬 -《move命报告》 ## 2017 毛 啸 -《关于数列递归式的一些研究》 **杨家齐 -《基于线性代数的一般图匹配》** 袁宇韬 -《多项式求和》 **钟知闲 -《浅谈信息学竞赛中的独立集问》** 陈俊锟 -《“神奇的子图”命报告及其拓展》 孙耀峰 -《动态传递闭包问的探究》 汪乐平 -《“A+B Problem”命报告》 **徐明宽 -《非常规大小分块算法初探》** 翁文涛 -《回文树及其应用》 闫书弈 -《“黑白树”命报告》 杨景钦 -《“正多边形”命报告》 冯 哲 -《浅谈决策单调性动态规划的线性解法》 沈 睿 -《“被操纵的线段树”命报告》 赵晟宇 -《计算机逻辑与艺术初探——基于逻辑的钢琴演奏音符力度模型》 洪华敦 -《“基因组重构”命报告》 ## 2018 杨懋龙 - 《浅谈生成函数在掷骰子问上的应用》 陈江伦 - 《“后缀树结点数”命报告及一类区间问的优化》 高睿泉 - 《浅谈保序回归问》 吴瑾昭 - 《“Fim 4”命报告》 任轩笛 - 《解决树上连通块问的一些技巧和工具》 梁晏成 - 《“Jellyfish”命报告及拓展探究》 王思齐 - 《LeafyTree及其实现的加权平衡树》 陈嘉乐 - 《“小H爱染色”命报告》 朱震霆 - 《一些特殊的数论函数求和问》 刘承奥 - 《浅谈DFT在信息学竞赛中的应用》 林旭恒 - 《“完美的队列”命报告》 杨乾澜 - 《浅谈拟阵的一些拓展及其应用》 董炜隽 - 《浅谈Splay与Treap的性质及其应用》 何中天 - 《“最小方差生成树”命报告》 陈 通 - 《欧拉图相关的生成与计数问探究》 ## 2019 钟子谦 - 《两类递推数列的性质和应用》 王修涵 - 《浅谈图模型上的随机游走问》 杨骏昭 - 《“小水”命报告》 高嘉煊 - 《浅谈图的点着色问》 戴 言 - 《浅谈格路计数相关问》 李佳衡 - 《算法竞赛中一些数论问的推广与高斯整数初探》 范致远 - 《“基础圆方树练习”命报告》 徐翊轩 - 《“整点计数”命报告以及对高斯整数的若干研究》 张哲宇 - 《浅谈树上分治算法》 吴思扬 - 《“组合数求和”命报告》 王思齐 - 《浅谈一类简洁数据结构》 陈孙立 - 《子串周期查询问的相关算法及其应用》 吴作同 - 《“公园”命报告》 孔朝哲 - 《浅谈可追溯化数据结构》 袁方舟 - 《浅谈杨氏矩阵在信息学竞赛中的应用》 ## 推荐文章 许智磊 -《后缀数组》 罗穗骞 -《后缀数组——处理字符串的有力工具》 朱泽园 -《半平面交的新算法及其实用价值》 胡伯涛 -《最小割模型在信息学竞赛中的应用》 方展鹏 -《浅谈如何解决不平等博弈问》 陈丹琦 -《基于连通性状态压缩的动态规划问》 贾志豪 -《组合游戏略述——浅谈SG游戏的若干拓展及变形》 武 森 -《浅谈信息学竞赛中的“0”和“1”》 李骥扬 -《线段跳表——跳表的一个拓展》 周 源 -《浅析"最小表示法"思想在字符串循环同构问中的应用》 高逸涵 -《数位计数问解法研究》 张昆玮 -《数学归纳法与解之道》 漆子超 -《分治算法在树的路径问中的应用》 俞华程 -《矩阵乘法在信息学中的应用》 陈瑜希 -《Pólya计数法的应用》 # 论文分类汇总(1999-2009) ## 组合数学 ### 计数与统计 2001 - 符文杰:《Pólya原理及其应用》 2003 - 许智磊:《浅谈补集转化思想在统计问中的应用》 2007 - 周冬:《生成树的计数及其应用》 2008 - 陈瑜希《Pólya计数法的应用》 ### 数位问 2009 - 高逸涵《数位计数问解法研究》 2009 - 刘聪《浅谈数位类统计问》 ### 动态统计 2004 - 薛矛:《解决动态统计问的两把利刃》 2007 - 余江伟:《如何解决动态统计问》 ### 博弈 2002 - 张一飞:《由感性认识到理性认识——透析一类搏弈游戏的解答过程》 2007 - 王晓珂:《解析一类组合游戏》 2009 - 曹钦翔《从“k倍动态减法游戏”出发探究一类组合游戏问》 2009 - 方展鹏《浅谈如何解决不平等博弈问》 2009 - 贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》 ### 母函数 2009 - 毛杰明《母函数的性质及应用》 ### 拟阵 2007 - 刘雨辰:《对拟阵的初步研究》 ### 线性规划 2007 - 李宇骞:《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》 ### 置换群 2005 - 潘震皓:《置换群快速幂运算研究与探讨》 ### 问答交互 2003 - 高正宇:《答案只有一个——浅谈问答式交互问》 ### 猜数问 2003 - 张宁:《猜数问的研究:一的推广》 2006 - 龙凡:《一类猜数问的研究》 ## 数据结构 ### 数据结构 2005 - 何林:《数据关系的简化》 2006 - 朱晨光:《基本数据结构在信息学竞赛中的应用》 2007 - 何森:《浅谈数据的合理组织》 2008 - 曹钦翔《数据结构的提炼与压缩》 ### 结构联合 2001 - 高寒蕊:《从圆桌问谈数据结构的综合运用》 2005 - 黄刚:《数据结构的联合》 ### 块状链表 2005 - 蒋炎岩:《数据结构的联合——块状链表》 2008 - 苏煜《对块状链表的一点研究》 ### 动态树 2006 - 陈首元:《维护森林连通性——动态树》 2007 - 袁昕颢:《动态树及其应用》 ### 左偏树 2005 - 黄源河:《左偏树的特点及其应用》 ### 跳表 2005 - 魏冉:《让算法的效率“跳起来”!——浅谈“跳跃表”的相关操作及其应用》 2009 - 李骥扬《线段跳表——跳表的一个拓展》 ### SBT 2007 - 陈启峰:《Size Balance Tree》 ### 线段树 2004 - 林涛:《线段树的应用》 ### 单调队列 2006 - 汤泽:《浅析队列在一类单调性问中的应用》 ### 哈希表 2005 - 李羽修:《Hash函数的设计优化》 2007 - 杨弋:《Hash在信息学竞赛中的一类应用》 ### Splay 2004 - 杨思雨:《伸展树的基本操作与应用》 ## 图论 ### 图论 2005 - 任恺:《图论的基本思想及方法》 ### 模型建立 2004 - 黄源河:《浅谈图论模型的建立与应用》 2004 - 肖天:《“分层图思想”及其在信息学竞赛中的应用》 ### 网络流 2001 - 江鹏:《从一道目的解法试谈网络流的构造与算法》 2002 - 金恺:《浅谈网络流算法的应用》 2007 - 胡伯涛:《最小割模型在信息学竞赛中的应用》 2007 - 王欣上:《浅谈基于分层思想的网络流算法》 2008 - 周冬《两极相通——浅析最大—最小定理在信息学竞赛中的应用》 ### 最短路 2006 - 余远铭:《最短路算法及其应用》 2008 - 吕子鉷《浅谈最短径路问中的分层思想》 2009 - 姜碧野《SPFA算法的优化及应用》 ### 欧拉路 2007 - 仇荣琦:《欧拉回路性质与应用探究》 ### 差分约束系统 2006 - 冯威:《数与图的完美结合——浅析差分约束系统》 ### 平面图 2003 - 刘才良:《平面图在信息学中的应用》 2007 - 古楠:《平面嵌入》 ### 2-SAT 2003 - 伍昱:《由对称性解2-SAT问》 ### 最小生成树 2004 - 吴景岳:《最小生成树算法及其应用》 2004 - 汪汀:《最小生成树问的拓展》 ### 二分图 2005 - 王俊:《浅析二分图匹配在信息学竞赛中的应用》 ### Voronoi图 2006 - 王栋:《浅析平面Voronoi图的构造及应用》 ### 偶图 2002 - 孙方成:《偶图的算法及应用》 ## 树 ### 树 2002 - 周文超:《树结构在程序设计中的运用》 2005 - 栗师:《树的乐园——一些与树有关的目》 ### 路径问 2009 - 漆子超《分治算法在树的路径问中的应用》 ### 最近公共祖先 2007 - 郭华阳:《RMQ与LCA问》 ### 划分问 2004 - 贝小辉:《浅析树的划分问》 ## 数论 ### 欧几里得算法 2009 - 金斌《欧几里得算法的应用》 ### 同余方程 2003 - 姜尚仆:《模线性方程的应用——用数论方法解决整数问》 ## 搜索 ### 搜索 2001 - 骆骥:《由“汽车问”浅谈深度搜索的一个方面——搜索对象与策略的重要性》 2002 - 王知昆:《搜索顺序的选择》 2005 - 汪汀:《参数搜索的应用》 ### 启发式 2009 - 周而进《浅谈估价函数在信息学竞赛中的应用》 ### 优化 2003 - 金恺:《探寻深度优先搜索中的优化技巧——从正方形剖分问谈起》 2003 - 刘一鸣:《一类搜索的优化思想——数据有序化》 2006 - 黄晓愉:《深度优先搜索问的优化技巧》 ## 背包问 2009 - 徐持衡《浅谈几类背包》 ## 匹配 2004 - 楼天城:《匹配算法在搜索问中的巧用》 ## 概率 ### 概率 2009 - 梅诗珂《信息学竞赛中概率问求解初探》 ### 数学期望 2009 - 汤可因《浅析竞赛中一类数学期望问的解决方法》 ## 字符串 ### 字符串 2003 - 周源:《浅析“最小表示法”思想在字符串循环同构问中的应用》 ### 多串匹配 2004 - 朱泽园:《多串匹配算法及其启示》 2006 - 王赟:《Trie图的构建、活用与改进》 2009 - 董华星《浅析字母树在信息学竞赛中的应用》 ### 后缀数组 2004 - 许智磊:《后缀数组》 2009 - 罗穗骞《后缀数组——处理字符串的有力工具》 ### 字符串匹配 2003 - 饶向荣:《病毒的DNA———剖析一道字符匹配问解析过程》 2003 - 林希德:《求最大重复子串》 ## 动态规划 ### 动态规划 2001 - 俞玮:《基本动态规划问的扩展》 2006 - 黄劲松:《贪婪的动态规划》 2009 - 徐源盛《对一类动态规划问的研究》 ### 状态压缩 2008 - 陈丹琦《基于连通性状态压缩的动态规划问》 ### 状态设计 2008 - 刘弈《浅谈信息学中状态的合理设计与应用》 ### 树形DP 2007 - 陈瑜希:《多角度思考创造性思维——运用树型动态规划解的思路和方法探析》 ### 优化 2001 - 毛子青:《动态规划算法的优化技巧》 2003 - 项荣璟:《充分利用问性质——例析动态规划的“个性化”优化》 2004 - 朱晨光:《优化,再优化!——从《鹰蛋》一浅析对动态规划算法的优化》 2007 - 杨哲:《凸完全单调性的加强与应用》 ## 计算几何 ### 立体几何 2003 - 陆可昱:《长方体体积并》 2008 - 高亦陶《从立体几何问看降低编程复杂度》 ### 计算几何思想 2004 - 金恺:《极限法——解决几何最优化问的捷径》 2008 - 程芃祺《计算几何中的二分思想》 2008 - 顾研《浅谈随机化思想在几何问中的应用》 ### 圆 2007 - 高逸涵:《与圆有关的离散化》 ### 半平面交 2002 - 李澎煦:《半平面交的算法及其应用》 2006 - 朱泽园:《半平面交的新算法及其实用价值》 ## 矩阵 ### 矩阵 2008 - 俞华程《矩阵乘法在信息学中的应用》 ### 高斯消元 2002 - 何江舟:《用高斯消元法解线性方程组》 ## 数学方法 ### 数学思想 2002 - 何林:《猜想及其应用》 2003 - 邵烜程:《数学思想助你一臂之力》 ### 数学归纳法 2009 - 张昆玮《数学归纳法与解之道》 ### 多项式 2002 - 张家琳:《多项式乘法》 ### 数形结合 2004 - 周源:《浅谈数形结合思想在信息学竞赛中的应用》 ### 黄金分割 2005 - 杨思雨:《美,无处不在——浅谈“黄金分割”和信息学的联系》 ## 其他算法 ### 遗传算法 2002 - 张宁:《遗传算法的特点及其应用》 2005 - 钱自强:《关于遗传算法应用的分析与研究》 ### 信息论 2003 - 侯启明:《信息论在信息学竞赛中的简单应用》 ### 染色与构造 2002 - 杨旻旻:《构造法——解的最短路径》 2003 - 方奇:《染色法和构造法在棋盘上的应用》 ## 一类问 ### 区间 2008 - 周小博《浅谈信息学竞赛中的区间问》 ### 序 2005 - 龙凡:《序的应用》 ### 系 2006 - 汪晔:《信息学中的参考系与坐标系》 ### 物理问 2008 - 方戈《浅析信息学竞赛中一类与物理有关的问》 ### 编码与译码 2008 - 周梦宇《码之道—浅谈信息学竞赛中的编码与译码问》 ### 对策问 2002 - 骆骥:《浅析解“对策问”的两种思路》 ## 优化 ### 算法优化 2002 - 孙林春:《让我们做得更好——从解法谈程序优化》 2004 - 胡伟栋:《减少冗余与算法优化》 2005 - 杨弋:《从的解法谈算法的优化》 2006 - 贾由:《由图论算法浅析算法优化》 ### 程序优化 2006 - 周以苏:《论反汇编在时间常数优化中的应用》 2009 - 骆可强《论程序底层优化的一些方法与技巧》 ### 语言 C++ 2004 - 韩文弢:《论C++语言在信息学竞赛中的应用》 ## 策略 ### 策略 2004 - 李锐喆:《细节——不可忽视的要素》 2005 - 朱泽园:《回到起点——一种突破性思维》 2006 - 陈启峰:《“约制、放宽”方法在解中的应用》 2006 - 李天翼:《从特殊情况考虑》 2007 - 陈雪:《问中的变与不变》 2008 - 肖汉骏《例谈信息学竞赛分析中的“深”与“广”》 ### 倍增 2005 - 朱晨光:《浅析倍增思想在信息学竞赛中的应用》 ### 二分 2002 - 李睿:《二分法与统计问》 2002 - 许智磊:《二分,再二分!——从Mobiles(IOI2001)一看多重二分》 2005 - 杨俊:《二分策略在信息学竞赛中的应用》 ### 调整 2006 - 唐文斌:《“调整”思想在信息学中的应用》 ### 随机化 2007 - 刘家骅:《浅谈随机化在信息学竞赛中的应用》 ### 非完美算法 2005 - 胡伟栋:《浅析非完美算法在信息学竞赛中的应用》 2008 - 任一恒《非完美算法初探》 ### 提交答案 2003 - 雷环中:《结果提交类问》 ### 守恒思想 2004 - 何林:《信息学中守恒法的应用》 ### 极限法 2003 - 王知昆:《浅谈用极大化思想解决最大子矩形问》 ### 贪心 2008 - 高逸涵《部分贪心思想在信息学竞赛中的应用》 ### 压缩法 2005 - 周源:《压去冗余缩得精华——浅谈信息学竞赛中的“压缩法”》 ### 逆向思维 2005 - 唐文斌:《正难则反——浅谈逆向思维在解中的应用》 ### 穷举 2004 - 鬲融:《浅谈特殊穷举思想的应用》 ### 目标转换 2002 - 戴德承:《退一步海阔天空——“目标转化思想”的若干应用》 2004 - 栗师:《转化目标在解中的应用》 ### 类比 2006 - 周戈林:《浅谈类比思想》 ### 分割与合并 2006 - 俞鑫:《棋盘中的棋盘——浅谈棋盘的分割思想》 2007 - 杨沐:《浅析信息学中的“分”与“合”》 ### 平衡思想 2008 - 郑暾《平衡规划——浅析一类平衡思想的应用》

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧